Layui如何实现树形表格treeTable的节点勾选联动

冬伟君_3616

冬伟君_3616

2026-07-27

844人浏览

原创

treeTable 的 cascade 配置决定父子节点联动行为,默认不开启,需显式设置 tree.data.cascade;值为 'all' 时双向联动,'parent' 仅父影响子,'children' 仅子影响父,'none' 关闭自动逻辑;配置必须写成 tree: { data: { cascade: 'all' } },字段名不可拼错或自定义。

treeTable 的 cascade 配置决定联动行为

默认不开启任何联动,必须显式设置 tree.data.cascade 才能触发父子状态同步。值为 'all' 时双向联动(父选→子全选,子部分取消→父半选),'parent' 仅父影响子,'children' 仅子影响父,'none' 完全关闭自动逻辑。

常见错误是漏配或拼错字段名:必须写成 tree: { data: { cascade: 'all' } },不是 cascade: 'all' 直接挂在顶层,也不是 treeCascade 这类自定义键名。

  • 懒加载节点下,'all' 模式仍有效,但只对已加载的子节点生效;未展开的子节点不会被自动选中
  • 若数据结构里没有 children 字段或字段为空数组,即使配置了 'all',父节点点击也不会触发子节点变化
  • 表头复选框(全选)的行为也受此配置控制,'all' 下它会递归选中所有层级,'parent' 则只选中第一层

手动实现全选子孙节点要调用 getChildren + setRowChecked

checkAll 方法只作用于当前已渲染的直接子节点,无法穿透到深层后代。真正想点一个父节点就选中所有子孙(含懒加载未展开的),得靠 getChildren(id) 拿到完整后代列表,再逐个 setRowChecked。

关键点在于:getChildren 返回的是 Promise(懒加载节点)或普通数组(已加载节点),不能直接 forEach。必须统一用 async/await 处理:

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
table.on('checkbox(treeTable)', async function(obj) {
  if (!obj.checked) return;
  const id = obj.data.id;
  const children = await table.getChildren(id) || [];
  children.forEach(child => {
    table.setRowChecked({ id: child.id, checked: true });
  });
  table.updateStatus();
});
  • 没加 await 就 forEach,对懒加载节点会报错或漏选
  • updateStatus() 必须显式调用,否则父节点半选/全选图标不更新
  • 如果节点从未展开过且后端没返回 hasChild: true,getChildren 返回空数组,联动就断了

父子反向联动(子选→父半选/全选)依赖数据结构干净

TreeTable 的半选状态(layui-tree-checkboxIndeterminate 类)不是靠 JS 算出来的,而是根据每个节点的 children 数组里已选数量自动推导。一旦数据里 children 缺失、字段名不对(比如叫 subs 而非 children)、或 checked 是字符串 'true' 而非布尔值 true,半选逻辑就失效。

  • 初始数据中叶子节点不能带 children: null 或 children: undefined,否则会被当成有子节点但为空,干扰半选判断
  • 使用 setRowChecked 修改状态后,必须等 DOM 更新完成再调用 updateStatus(),否则祖先节点状态不同步
  • 如果用了自定义 id 字段(比如叫 menu_id),需在 tree.idName 中声明,否则 getChildren 和 setRowChecked 找不到对应节点

监听 checkbox 事件时别直接操作 DOM 类名

老写法里用 $('.layui-form-checked').addClass() 或手动 toggle layui-form-checked 类,会导致 TreeTable 内部状态和 UI 不一致——勾选了但 checkStatus() 拿不到,或者 UI 显示已选但实际未提交。

所有状态变更必须走组件 API:setRowChecked 改单行、checkAll 改当前页、setChecked 批量设 ID 列表。DOM 类只是渲染结果,不是状态源。

  • 监听事件要用 table.on('checkbox(tableFilter)', ...),不是 form.on('checkbox(...)')
  • 不要在回调里用 $(obj.elem).prop('checked', true),这只会改 checkbox 元素,不触发 TreeTable 数据层更新
  • 如果需要兼容旧版或混合渲染,优先重构数据结构,而不是补 DOM 操作补丁
真实场景里最难的从来不是写几行 JS,而是确保后端返回的数据结构严格匹配 TreeTable 的字段契约:id、children、hasChild、isLazy 全对齐,且类型全是预期值。差一个 null 或拼错一个字段,联动就静默失效。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5603

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6610

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6278

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

883

5

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

2026.10.21

20

15

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

2026.10.21

0

16

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

2026.10.21

0

16

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

120

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.2万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习