zoukankan      html  css  js  c++  java
  • 解决easyUI 父子节点选取onCheck事件死循环问题

     参考http://bbs.csdn.net/topics/391116087中3楼代码,对onCheck事件设置标志位,控制递归的开始和结束

    var flag = 1;//控制递归标志位
            $('#tree').tree({
                url : sy.contextPath + '/base/syorganization!doNotNeedSecurity_getSyorganizationsTree.do',
                parentField : 'pid',
                checkbox : true,
                cascadeCheck : false,//true时为:点击选中子节点则默认选中所有父节点,点击不选中父节点则不选中所有子节点
                formatter : function(node) {
                    return node.name;
                },
                onCheck : function(node,checked){
                    if(flag==1){
                    if($('#tree').tree('getParent',node.target)!=null){//不是顶节点
                        if(!$('#tree').tree('isLeaf',node.target)){//不是叶子节点
                            var parent = $('#tree').tree('getParent',node.target);
                            var childrens = $('#tree').tree('getChildren',node.target);
                            var subNodes = getSubChildren(parent);
                            if(node.checked){
                                for(var i=0;i<childrens.length;i++){
                                    flag = 0;
                                    $('#tree').tree('check',childrens[i].target);
                                }
                                flag = 1;
                            }else{
                                for(var i=0;i<childrens.length;i++){
                                    flag = 0;
                                    $('#tree').tree('uncheck',childrens[i].target);
                                }
                                flag = 1;
                            }
                            var j = 0;//是否选中父节点标志位
                            for(var i=0;i<subNodes.length;i++){
                                j=subNodes.length;
                                if(!subNodes[i].checked){
                                    j=subNodes.length-1;//使其父节点不选中
                                    flag = 0;//结束递归
                                    $('#tree').tree('uncheck',parent.target);
                                    break;
                                }
                            }
                            flag = 1;
                            if(j==subNodes.length){
                                flag=0;
                                $('#tree').tree('check',parent.target);
                                flag = 1;
                            }
                        }else{//叶子节点
                            var root = $('#tree').tree('getRoot',node.target);
                            var parent = $('#tree').tree('getParent',node.target);
                            var subNodes = getSubChildren(parent);
                            var j = 0;//是否选中父节点标志位
                            for(var i=0;i<subNodes.length;i++){
                                j=subNodes.length;
                                if(!subNodes[i].checked){
                                    j=subNodes.length-1;//使其父节点不选中
                                    flag = 0;//结束递归
                                    $('#tree').tree('uncheck',parent.target);
                                    $('#tree').tree('uncheck',root.target);
                                    break;
                                }
                            }
                            flag = 1;
                            if(j==subNodes.length){
                                flag=1;//保留出口递归
                                $('#tree').tree('check',parent.target);
                                flag = 1;
                            }
                        }
                    }else{//顶节点
                        var childrens = $('#tree').tree('getChildren',node.target);
                        if(node.checked){
                            for(var i=0;i<childrens.length;i++){
                                flag=0;
                                $('#tree').tree('check',childrens[i].target);
                                flag = 1;
                            }
                        }else{
                            for(var i=0;i<childrens.length;i++){
                                flag=0;
                                $('#tree').tree('uncheck',childrens[i].target);
                                flag = 1;
                            }
                        }
                    }
                    }
        }

    —————————————————————————————————————行走在人猿的并行线——Laughing_Lz
  • 相关阅读:
    哈夫曼树及哈夫曼编码
    01背包问题
    Java IO
    Java对象的复制三种方式
    TCP三次握手和四次挥手
    轻量级Java Web框架的实现原理
    Java并发
    消息队列
    赋值、浅拷贝、深拷贝
    Python文件操作(txtxlsxcsv)及os操作
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5217887.html
Copyright © 2011-2022 走看看