美文网首页
【前端笔记1】《easyui的小套路整理》

【前端笔记1】《easyui的小套路整理》

作者: 吴里庆庆 | 来源:发表于2018-08-18 14:32 被阅读0次

    combotree实现下拉树的全选只要子节点(“保小不保大”,手动斜眼)

    1.简单描述需求&发现两个小坑坑

    emmm...,利用下拉框+树节点的结合实现下拉树,完成多选且只选择叶子节点并将叶子节点的文本值拼接到文本域中。

    • 坑点一:
      采用api上只设置用户选叶子节点(onlyLeafCheck: true),但是当叶子节点过多时我想全选怎么办?难道要一个个选吗。。这是要气死宝宝哦!!!


      图1.1 设置只选叶子节点却只能一个个勾选叶子节点
    • 坑点二
      那如果允许选到根节点,这时你会发现一个很无语的sao操作就是选完根节点,子节点虽然全选上了,but我不要根节点啊,我只想要子节点,子节点,子节点啊(重要的事说三遍!!!)


      图1.2 根节点加上复选框偏偏把自己也选上

    2.开始填坑

    emmm...,我也不知道我的解决方法是否妥当,但确实是一个解决上面两个坑的方法。当然眼尖的你如果有更好的解决的方式,请直接留言哦!

    • 首先说说思路:
      欲想填其坑,必先找其源。我通过在js里修改树拿到的值发现后面判断各种真麻烦,而且实现了半圈也没实现(我这个菜鸟啊。。。所以下面直接简单粗暴修改easyui自己的js直接在Oncheck事件里判断如果有选中根节点不把它的值放进values不就行了嘛!)
    • 解决:
      (这里是要修改的点的前期摸索,可以直接跳过)大概是不知道onCheck事件在easyui.js中哪行,因为直接combotree找肯定有好几处,所以我直接定义了一个onCheck事件里面写一个错误的事件,再通过控制台打印直接定位combotree对应的onCheck事件塞值的地方:
    /*onCheck:function(node,checked){
                              console.log(node.getTree());
                          }*/
    

    定位到修改的地方后,接下来就是鉴证奇迹的时刻!!!
    ★★★在遍历结点的时候判断只有是叶子节点才把值push到结果集:

    var isLeaf=tree.tree('isLeaf', _933[i].target);
      if(isLeaf){
        vv.push(_933[i].id);
        ss.push(_933[i].text);
      }
    

    3.附上相关代码

    • 3.1.html页面
    <tr>
        <td>偶像:</td>
        <td><select id="wq" class="easyui-combotree" 
                            url="data/city_data.json" 
                           data-options="multiple:true,multiline:true"
                           name="偶像列表" 
                           style="width:400px;height:100px"/>
            </td>
    </tr>
    
    • 3.2 数据文件
    [{
        "id":1,
        "text":"男演员",
        "iconCls":"icon-group",
        "children":[{
                "id":11,
                "text":"侯明昊",
                "iconCls":"icon-man"
    
            },{
                "id":12,
                "text":"丹尼斯吴",
                "iconCls":"icon-man"
    
            }]},
        {"id":2,
        "text":"女演员",
        "iconCls":"icon-group",
        "children":[{
                "id":21,
                "text":"杨幂",
                "iconCls":"icon-woman"
                
            },{
                "id":22,
                "text":"全智贤",
                "iconCls":"icon-woman"
    
            },{
                "id":23,
                "text":"金智媛",
                "iconCls":"icon-woman"
    
            },{
                "id":24,
                "text":"韩佳人",
                "iconCls":"icon-woman"
    
            }]
            },
    {"id":3,
        "text":"男歌手",
        "iconCls":"icon-group",
        "children":[{
                "id":31,
                "text":"林俊杰",
                "iconCls":"icon-man"
                
            },{
                "id":32,
                "text":"张杰",
                "iconCls":"icon-man"
    
            }]
            },
        {"id":4,
        "text":"女歌手",
        "iconCls":"icon-group",
        "children":[{
                "id":41,
                "text":"Hebe",
                "iconCls":"icon-woman"
                
            },{
                "id":42,
                "text":"Avril",
                "iconCls":"icon-woman"
    
            },{
                "id":43,
                "text":"林允儿",
                "iconCls":"icon-woman"
    
            },{
                "id":44,
                "text":"郑秀晶",
                "iconCls":"icon-woman"
    
            },{
                "id":45,
                "text":"李宇春",
                "iconCls":"icon-woman"
    
            },{
                "id":46,
                "text":"蔡依林",
                "iconCls":"icon-woman"
    
            }]
            }
    ]
    
    • 3.3.页面中的js
     $(function () {
                $("#wq").combotree({
                            url: 'data/city_data.json',
                            multiple: true,//当为true时,为多选,false为单选
                            lines: true,
                            checkbox: true,
                            onlyLeafCheck: false,
                            cascadeCheck:true, 
                            /*onCheck:function(node,checked){
                                console.log(node.getTree());
                            }*/
                    });
            });
            
    
    • 3.4 jquery.easyui.min.js中修改部位截图

    注:红色框内是onCheck事件赋值的代码区域:
    橘黄色框内是我添加的代码,_933每个的js可能因为版本不一样所以定义不一样记得灵活修改哦!


    图3.1 jquery.easyui.min.js中修改位置截图

    4.最终效果图

    emmm...最后放大招宝宝要上大菜啦,如下:


    图4.1 最终效果图

    相关文章

      网友评论

          本文标题:【前端笔记1】《easyui的小套路整理》

          本文链接:https://www.haomeiwen.com/subject/tylfiftx.html