layui tree组件回显bug问题,父级元素选中导致子集全部选中
layui组件回显不过,父级元素选中导致子集全部选中
1、适用动态渲染tree.setChecked方法选中
2、适用直接渲染data数据携带checked选中
比如
用tree.setChecked(‘demoId’, menu) 回显结果
menu = [1,29,42,35,37]
而且使用tree.setChecked方法选中的时候,如果有写oncheck回调必定会触发,比较不便
修改的方法
找到你的tree.js全局搜索 setChecked
// 设置选中节点Class.prototype.setChecked = function(checkedId){var that = this;var options = that.config;// 初始选中that.elem.find('.'+ELEM_SET).each(function(i, item){var thisId = $(this).data('id');var input = $(item).children('.'+ELEM_ENTRY).find('input[same="layuiTreeCheck"]');var reInput = input.next();// 若返回数字if(typeof checkedId === 'number'){if(thisId.toString() == checkedId.toString()){if(!input[0].checked){reInput.click();};return false;};}// 若返回数组else if(typeof checkedId === 'object'){layui.each(checkedId, function(index, value){if(value.toString() == thisId.toString() && !input[0].checked){reInput.click();return true;}});}});};
修改为
// 设置选中节点Class.prototype.setChecked = function(checkedId){var that = this;var options = that.config;// 初始选中that.elem.find('.'+ELEM_SET).each(function(i, item){var thisId = $(this).data('id');var input = $(item).children('.'+ELEM_ENTRY).find('input[same="layuiTreeCheck"]');var reInput = input.next();// 若返回数字if(typeof checkedId === 'number'){if(thisId.toString() == checkedId.toString()){if(!input[0].checked){reInput.click();};return false;};}// 若返回数组else if(typeof checkedId === 'object'){// 修改部分 startfor (let item of checkedId) {if(input.val()==item){input.prop("checked",true);//这里留意input的对应关系input.next().addClass("layui-form-checked");}}// 修改部分 end}});};