layui tree 编辑回显数据 父节点checked为true会 导致子节点被自动全选bug解决方法

时间:2025-04-02 15:41:16

Layui 版本

v2.5.6
还原被压缩的JS地址.

修改145行位置代码为下面这样:

  1. if ("object" == typeof i.children || e.find("." + v)[0]) {
  2. var r = e.find("." + v).find('input[same="layuiTreeCheck"]');
  3. if(sessionStorage.getItem('checkChild')!=="false"){//初始化页面
  4. r.each(function() {
  5. this.disabled || (this.checked = t)
  6. });
  7. }else{
  8. if(!t) {
  9. r.each(function () {
  10. this.disabled || (this.checked = t)
  11. });
  12. }
  13. }
  14. }

调用代码:

  1. sessionStorage.setItem('checkChild',"false");//初始化去掉全选功能
  2. tree.render({
  3. elem: '#RoleMenuTree'
  4. , data: treeData
  5. , showCheckbox: true //是否显示复选框
  6. , id: 'RoleMenu'
  7. // , isJump: true //是否允许点击节点时弹出新窗口跳转
  8. ,accordion: true //手风琴模式展开一个自动收缩上一个
  9. , click: function (obj) {
  10. let data = obj.data; //获取当前点击的节点数据
  11. layer.msg('状态:' + obj.state + '<br>节点数据:' + JSON.stringify(data));
  12. }
  13. });
  14. sessionStorage.setItem('checkChild',"true");//初始化页面完成后恢复全选功能

实现效果为:当初始化tree的时候禁用全选功能(防止父节点有checked属性导致全选子节点)。初始化完成后,恢复全选,通过sessionStorage控制

参考过此文章作者的思路:/qq_33556442/article/details/109800175

另说明:上面的修改方法存在不足之处为:数据量大了,效率指数下降,完美的解决方法可采用Layui Tree 禁用选中父节点后自动选中子节点(编辑初始化页面)解决方法二 才是正道。在145行位置不管是添加checkChild标识判断还是读取sessionStorage判断都存在严重影响render效率问题。