zoukankan      html  css  js  c++  java
  • ASP.NET 2.0里Treeview控件中对Checkbox的联级选择

    1. 每勾选一个节点就要遍历勾选它的所有子节点 setChildChecked 同时循环勾选父节点  setParentChecked

    2. 
    每取消勾选一个节点就要遍历取消它的所有子节点  setChildUnChecked  如果同级其他的节点都未勾选,则循环取消父节点  setParentUnChecked

       CheckBox 
     ID 形如:TreeView1n1CheckBox
       
    ID+'n'+编号+'CheckBox' 编号从0开始
       
    它的所有子节点都会在 ID  TreeView1n1Nodes  Div .


    //TreeView onclick 
    触发事件
    function client_OnTreeNodeChecked(event)
    {
        
    //得到当前所 Click 的对象
        var objNode;
        
    if(!public_IsObjectNull(event.srcElement))
        {
            
    //IE
            objNode = event.srcElement;
        }
        
    else
        {
            
    //FF
            objNode = event.target;
        }

        
    //判断是否 Click  CheckBox
        if(!public_IsCheckBox(objNode))
            
    return;

        
    var objCheckBox = objNode;
        
    //根据CheckBox状态进行相应处理
        if(objCheckBox.checked==true)
        {
            
    //递归选中父节点的 CheckBox
            setParentChecked(objCheckBox);
            
            
    //递归选中所有的子节点
            setChildChecked(objCheckBox);
        }
        
    else
        {        
            
    //递归取消选中所有的子节点
            setChildUnChecked(objCheckBox);
            
            
    //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中).
            setParentUnChecked(objCheckBox);
        }
    }

    //判断对象是否为空
    function public_IsObjectNull(element)
    {
        
    if(element==null || element == "undefined")
            
    return true;
        
    else
            
    return false;
    }

    //判断对象是否为 CheckBox
    function public_IsCheckBox(element)
    {
        
    if(public_IsObjectNull(element))
            
    return false;
            
        
    if(element.tagName!="INPUT" || element.type!="checkbox")
            
    return false;
        
    else
            
    return true;
    }
    //得到包含所有子节点的 Node(Div 对象)
    function public_CheckBox2Node(element)
    {
        
    var objID = element.getAttribute("ID");
        objID = objID.substring(0,objID.indexOf("CheckBox")); 
        
    return document.getElementById(objID+"Nodes");
    }
    //得到父节点的 CheckBox
    function public_Node2CheckBox(element)
    {
        
    var objID = element.getAttribute("ID");
        objID = objID.substring(0,objID.indexOf("Nodes")); 
        
    return document.getElementById(objID+"CheckBox");
    }
    //得到本节点所在的 Node(Div 对象)
    function public_GetParentNode(element) 
    {
        
    var parent = element.parentNode;
        
    var upperTagName = "DIV";
        
    //如果这个元素还不是想要的 tag 就继续上溯
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) 
        {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        
    return parent;
    }


    //设置节点的父节点 Checked
    function setParentChecked(currCheckBox)

        
    var objParentNode= public_GetParentNode(currCheckBox);
        
    if(public_IsObjectNull(objParentNode))
            
    return;    
        
        
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

        
    if(!public_IsCheckBox(objParentCheckBox))
            
    return
            
        objParentCheckBox.checked = 
    true;
        setParentChecked(objParentCheckBox);
    }

    //当父节点的所有子节点都未被选中时,设置父节点 UnChecked
    function setParentUnChecked(currCheckBox)
    {
        
    var objParentNode= public_GetParentNode(currCheckBox);
        
    if(public_IsObjectNull(objParentNode))
            
    return;   
        
    //判断 currCheckBox 的同级节点是否都为 UnChecked.
        if(!IsMyChildCheckBoxsUnChecked(objParentNode))
            
    return;    
        
        
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

        
    if(!public_IsCheckBox(objParentCheckBox))
            
    return
            
        objParentCheckBox.checked = 
    false;    
        setParentUnChecked(objParentCheckBox);
    }

    //设置节点的子节点 UnChecked
    function setChildUnChecked(currObj)
    {
        
    var currNode;
        
    if(public_IsCheckBox(currObj))
        {
            currNode = public_CheckBox2Node(currObj);
            
    if (public_IsObjectNull(currNode))
                
    return;
        }
        
    else
            currNode = currObj;
           
        
    var currNodeChilds = currNode.childNodes;
        
    var count = currNodeChilds.length; 
        
    for(var i=0;i<count;i++)
        {
            
    var childCheckBox = currNodeChilds[i];
            
    if(public_IsCheckBox(childCheckBox))
            {
                childCheckBox.checked = 
    false;
            }
            setChildUnChecked(childCheckBox); 
        }
    }

    //设置节点的子节点 Checked
    function setChildChecked(currObj)

        
    var currNode;
        
    if(public_IsCheckBox(currObj))
        {
            currNode = public_CheckBox2Node(currObj);
            
    if (public_IsObjectNull(currNode))
                
    return;
        }
        
    else
            currNode = currObj;
            
        
    var currNodeChilds = currNode.childNodes;
        
    var count = currNodeChilds.length; 
        
    for(var i=0;i<count;i++)
        {
            
    var childCheckBox = currNodeChilds[i];
            
    if(public_IsCheckBox(childCheckBox))
            {
                childCheckBox.checked = 
    true;
            }
            setChildChecked(childCheckBox); 
        }
    }

    //判断该节点的子节点是否都为 UnChecked
    function IsMyChildCheckBoxsUnChecked(currObj)
    {
        
    var retVal = true;
        
        
    var currNode;
        
    if(public_IsCheckBox(currObj) && currObj.checked == true)
        {
            
    return false;
        }
        
    else
            currNode = currObj;
           
        
    var currNodeChilds = currNode.childNodes;
        
    var count = currNodeChilds.length; 
        
    for(var i=0;i<count;i++)
        {
            
    if (retVal == false)
                
    break;
            
    var childCheckBox = currNodeChilds[i];
            
    if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
            {
                retVal = 
    false;
                
    return retVal;
            }
            
    else
                retVal = IsMyChildCheckBoxsUnChecked(childCheckBox);         
        }
        
    return retVal;
    }
  • 相关阅读:
    [Oracle]跨越 DBLINK 访问表时,数据缓存在何处的Data Buffer 中?
    [Oracle]查看数据是否被移入 DataBuffer 的方法
    [Oracle]如何为数据库设置Event(eg: ORA-00235)
    [Oracle][Corruption]究竟哪些检查影响到 V$DATABASE_BLOCK_CORRUPTION
    [Oracle]OpenVMS 运行 Oracle 时的推荐值
    [Oracle]System 表空间的文件丢失
    [Oracle]如果误删了某个数据文件,又没有被备份,能否恢复?
    OFS环境,删除Resource 时出现错误失败,应该如何继续
    基于酷Q的工作秘书机器人
    C++编写简单的俄罗斯方块游戏
  • 原文地址:https://www.cnblogs.com/star250/p/1080795.html
Copyright © 2011-2022 走看看