Layui树形组件中checked:true仅对叶子节点生效,父节点设此值会连带勾选子节点;需确保节点有唯一id且checked为布尔值;推荐用tree.setChecked()初始化以规避自动联动。
data 中直接设 checked: true 只对叶子节点有效
最直观的方式是在传入 tree.render() 的 data 数组里,给目标节点加 checked: true。layui 会识别并渲染勾选状态,但要注意:如果该节点有 children,它会被视为父节点,设 checked: true 会导致所有子节点也被连带勾选——这是默认行为,不是 bug。
- 仅当节点无
children(即叶子节点)时,checked: true才真正只影响它自己 - 每个节点必须有唯一
id字段,否则后续调用tree.setChecked()或联动逻辑会失败 -
checked必须是布尔值true/false,写成字符串"true"无效 - 后端返回字段名如果是
is_checked或selected,需前端映射为checked,否则 Layui 不认
tree.setChecked() 是更可控的初始化方式
渲染完成后调用 tree.setChecked(),能绕过父子自动勾选问题,适合根据权限 ID 列表、或只勾选叶子节点等复杂场景。
- 必须在
tree.render()中指定id参数(如id: 'treeDemo'),否则tree.setChecked('treeDemo', [...])会报"Cannot read properties of undefined (reading 'getChecked')" - 第二个参数是 ID 数组,例如
[101, 102],即使这些 ID 对应的是父节点,也只勾选它们本身(不自动展开/勾选子节点) - 传空数组
[]可清空全部勾选,适合重置表单 - 该方法不会触发
oncheck回调,业务逻辑需手动同步
遇到 checked 不生效?检查是否用了 treetable 或自定义封装
部分定制版本(尤其是 treetable)不依赖原始 checked 字段,而是读取内部标记 LAY_CHECKED。
- 若发现数据里写了
checked: true但复选框没勾上,先确认是否用了treetable - 需要在
tree.render()前,手动补全LAY_CHECKED: 'true'(注意是字符串,不是布尔值) - 同时检查
checkName配置,比如treetable默认可能读checked,但若配置了checkName: 'selected',就得把字段名改成selected
父节点默认展开和默认勾选是两回事
别混淆 spread: true 和 checked: true。前者控制节点是否默认展开(视觉上显示子节点),后者控制是否默认勾选(复选框状态)。
-
spread: true必须写在节点数据里,且只对有children的节点生效;写成字符串"true"无效 - 手风琴模式(
accordion: true)下,多个spread: true的同级节点,只有第一个会真展开 - 如果想“默认展开 + 默认勾选”,两个字段都要显式设置,且各自独立生效
layui.tree.js 里的 checkChild 相关逻辑,就别指望靠配置绕过这个限制。


















