【layui2.8 tree组件】点击(click)节点名 实现 勾选 / 取消 状态

@[Layui Tree]组件点击节点 实现 勾选 / 取消 状态

最简洁方法:Layui 模拟点击事件实现

在Layui中,模拟点击可以使用jQuery的.click()方法来实现。假设你有一个Layui的按钮元素,它的选择器是 '#myButton',你可以使用以下代码来模拟点击该按钮:

$('#myButton').click();

上述代码将触发 IDmyButton 的按钮元素的点击事件,模拟用户点击该按钮的行为。你可以将上述代码放在你需要模拟点击的适当位置,例如在某个函数中或者在某个事件触发时。

请注意,模拟点击只适用于可以通过JavaScript触发的事件,对于某些受限制的按钮或出于安全考虑的按钮,可能无法通过模拟点击来触发其行为。

具体实现方法:

 tree.render({
                elem: '#treeAuth',
                data: data,
                id:"treeAuth",
                customName:{
                    id: 'id',
                    title: 'name',
                    //children: 'child'
                },
                 //重点:onlyIconControl:true 必须 否则会与 展开伸缩 冲突
                onlyIconControl:true,               //是否仅允许节点左侧图标控制展开伸缩
                 //重点:showCheckbox: true,   必须 否则 无选择项
                showCheckbox: true,                 // 是否显示复选框
                //onlyIconControl: true,              // 是否仅允许节点左侧图标控制展开收缩
                //isJump: true,                       // 是否允许点击节点时弹出新窗口跳转
                click: function(obj){
                    var ischecked = obj.data.checked;           // 当前节点是否选中
                    var id = obj.data.id;                       // 当前节点id
                    var parent_id = obj.data.parent_id;         // 上级节点id
                    var this_elem = obj.elem;                   // 得到当前节点元素
                    //定位 当前节点的 复选框 元素
                    var checkbox = obj.elem.find('.layui-form-checkbox');
                    checkbox.click();		//模拟点击 复选框
                    console.log(checkbox);

                }
            });
        }
        

学习他人方法:勾选后做判断,如果不符合条件则取消勾选

实现方法:

使用 tree的oncheck事件,在回调函数中做判断,并确定是否取消勾选:

Tree.render({
    elem: '#menuTree',
    id: 'roleMenuTree',
    showCheckbox:true,
    data: tempData,
    oncheck: function(obj){
        //console.log(obj.data); // 得到当前点击的节点数据
        //console.log(obj.checked); // 节点是否被选中
        //console.log(obj.elem); // 得到当前节点元素

        if (obj.data.text==='菜单管理'){
            layer.msg('《菜单管理》不能选!');
            obj.elem.find('.layui-form-checked').removeClass('layui-form-checked');
            return;
        }
    }
});

即使用

obj.elem.find('.layui-form-checked').removeClass('layui-form-checked'); 		//取消勾选。

经过验证,在后边使用

 tree.getChecked(id)

获取已勾选的内容时,与页面显示的数据一致,无需特殊处理。

BUG:取消后 再次点击无法选中

解决方法:


        // 渲染 树结构数据
        function rendertree(data){
            tree.render({
                elem: '#treeAuth',
                data: data,
                id:"treeAuth",
                customName:{
                    id: 'id',
                    title: 'name',
                    //children: 'child'
                },
                //重点:onlyIconControl:true 必须 否则会与 展开伸缩 冲突
                onlyIconControl:true,               // 是否仅允许节点左侧图标控制展开伸缩
                showCheckbox: true,                 // 是否显示复选框
                //onlyIconControl: true,              // 是否仅允许节点左侧图标控制展开收缩
                //isJump: true,                       // 是否允许点击节点时弹出新窗口跳转
                click: function(obj){
                    console.log(obj.data.checked);      //当前节点是否选中
                    console.log(obj.data.id);           //当前节点id
                    console.log(obj.elem);          		// 得到当前节点元素

                    //Layui 当前节点 选中样式 (勾选样式)
                    var classStr = 'layui-unselect layui-form-checkbox layui-form-checked';	
                    //通过 样式名 定位当前节点元素
                    var checkbox = obj.elem.find('.layui-form-checkbox');
                    var classNameStr = checkbox[0].className;		//获取当前节点样式(className)

                    //判断 当前节点样式 是否包含 选中(勾选样式) 并执行 下一步操作
                    if (classNameStr === classStr){
                        checkbox.removeClass('layui-form-checked');			//删除 勾选样式
                    }else {
                        checkbox.addClass('layui-form-checked');					//添加 勾选样式
                    }
                    //obj.elem.find('.layui-form-checked').removeClass('layui-form-checked');
                    //layer.msg('状态:'+ obj.state + '<br>节点数据:' + JSON.stringify(data));
                }
            });
        }
        

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: el-tree 是一个基于 Vue.js 的树形控件,它支持父节点节点全部勾选和子节点节点自动勾选等功能。在实现上,可以使用 v-model 指令绑定数据,并使用 @check-change 事件监听勾选状态的变化,从而实现父子节点之间的级联勾选。 在子节点只要有一个不勾选节点就是不勾选状态实现上,可以在 @check-change 事件中遍历子节点勾选状态,如果有一个子节点没有被勾选,就取消节点勾选状态。 ### 回答2: el-tree 是 Element UI 中的一种树形组件,用于展示具有层级关系的数据。根据问题描述,我们可以使用该组件实现勾选节点节点全部勾选勾选全部子节点节点自动勾选的功能,以及根据子节点勾选状态来确定父节点勾选状态。 首先,对于勾选节点节点全部勾选的功能,我们可以通过监听勾选事件,当勾选节点时,遍历该父节点的所有子节点,并将所有子节点设置勾选状态。代码示例如下: ```vue <template> <el-tree :data="data" @node-click="handleNodeClick"> </el-tree> </template> <script> export default { data() { return { data: [{ label: '父节点', children: [{ label: '子节点1' }, { label: '子节点2' }] }] }; }, methods: { handleNodeClick(data) { if (data.children) { // 点击节点时,遍历子节点设置勾选状态 data.children.forEach(child => { this.$refs.tree.getNode(child).setChecked(true); }); } } } }; </script> ``` 其次,对于勾选全部子节点节点自动勾选的功能,我们可以通过监听勾选事件,在勾选取消勾选节点时,根据子节点勾选状态设置节点勾选状态。代码示例如下: ```vue <template> <el-tree :data="data" show-checkbox @check="handleCheck"> </el-tree> </template> <script> export default { data() { return { data: [{ label: '父节点', children: [{ label: '子节点1', checked: true }, { label: '子节点2', checked: true }] }] }; }, methods: { handleCheck(data) { const node = this.$refs.tree.getNode(data); if (node.parent && !node.checked) { // 如果子节点取消勾选,则取消节点勾选 node.parent.setChecked(false); } } } }; </script> ``` 综上所述,以上的代码可以实现勾选节点节点全部勾选勾选全部子节点节点自动勾选的功能,子节点只要有一个不勾选,父节点就是不勾选状态。 ### 回答3: el-tree 是 Element UI 提供的树形组件,具有复选框的功能。根据题目要求,实现以下勾选规则: 1. 当点击节点时,如果该父节点的子节点全部勾选,那么父节点自动勾选;如果有任何一个子节点没有勾选,则父节点勾选。 2. 当点击节点时,如果该子节点是父节点的最后一个未勾选节点,那么勾选该子节点会将父节点勾选;反之,只有勾选节点后,子节点才会自动勾选。 为了实现该功能,我们可以使用 Element UI 提供的 tree-props 属性中的 "emit-checked" 和 "check-strictly": 1. 要使得父节点在子节点全部勾选时自动勾选,我们可以设置 tree-props 属性的 "emit-checked" 为 true。 2. 要使得子节点只要有一个不勾选节点就是不勾选状态,我们可以设置 tree-props 属性的 "check-strictly" 为 true。 具体实现: ``` <template> <el-tree :data="treeData" :props="treeProps" node-key="id" ></el-tree> </template> <script> export default { data() { return { treeData: [ { id: 1, label: "父节点1", children: [ { id: 11, label: "子节点1-1" }, { id: 12, label: "子节点1-2" }, { id: 13, label: "子节点1-3" }, ], }, { id: 2, label: "父节点2", children: [ { id: 21, label: "子节点2-1" }, { id: 22, label: "子节点2-2" }, { id: 23, label: "子节点2-3" }, ], }, ], treeProps: { emitChecked: true, checkStrictly: true, }, }; }, }; </script> ``` 上述代码中,我们使用了一个简单的树形结构作为示例。在实际使用中,你可以根据自己的需求进行相应的数据处理和页面渲染。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值