• 解决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
  • 相关阅读:
    Twitter如何在数千台服务器上快速部署代码?
    系统架构师学习笔记_第六章(上)_连载
    使用IIS内置压缩功能,增加网站访问速度
    系统架构师学习笔记_第八章_连载
    微软企业库4.1学习笔记(十五)缓存模块3 使用数据库作为后端存储
    快速搞懂 SQL Server 的锁定和阻塞
    微软企业库4.1学习笔记(十四)缓存模块2 使用缓存模块进行开发
    微软企业库4.1学习笔记(十六)缓存模块4 服务器场中的缓存使用
    Agile PLM Engineering Collaboration
    EC Client Customizing EC Client 客户化
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5217887.html
Copyright © 2020-2023  润新知