vs2005 treeview checkbox级联控制

来源:互联网 发布:视频点播服务器软件 编辑:程序博客网 时间:2024/05/22 15:41

在网上查了好多资料,终于搞定了级联控制:代码如下

 

   var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);//判断浏览器
    //根据元素ID获取元素  
    function public_getElementByID(target)  
    {  
        var el;  
        if (__nonMSDOMBrowser)    
        {  
            el = document.getElementById(target);  
        }  
        else    
        {  
            el = document.all[target];  
        }  
        return el;                  
    }  
    //获取触发事件的的目标元素  
    function public_getEventTarget()  
    {  
        var target;  
        if (__nonMSDOMBrowser)
        {  
            target = event.target;  
        }  
        else
        {  
          target = event.srcElement;  
        }  
        return target;  
    }  
    //获取元素指定tagName的父元素  
    function   public_GetParentByTagName(element, tagName)  
    {  
        var parent = element.parentNode;  
        var upperTagName = tagName.toUpperCase();  
        while (parent && (parent.tagName.toUpperCase() != upperTagName))
        {  
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;  
        }  
        return parent;  
    }  
    //设置节点的父节点Cheched,权限树的规则一:该节点可访问,则能访问他的父节点(递归)  
//    function setParentChecked(objNode)  
//    {        
//        var objParentDiv = public_GetParentByTagName(objNode,"div");
////        alert(objParentDiv.innerHTML);  
//        if(objParentDiv==null || objParentDiv == "undefined")  
//        {  
//          return;  
//        }  
//        var objID = objParentDiv.getAttribute("ID");  
//        objID = objID.substring(0,objID.indexOf("Nodes"));  
//        objID = objID+"CheckBox";  
//        var objParentCheckBox = public_getElementByID(objID);  
//        if(objParentCheckBox==null || objParentCheckBox == "undefined")  
//        {  
//          return;  
//        }    
//        if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
//        {  
//          return;
//        }         
//        objParentCheckBox.checked   =   true;  
//        setParentChecked(objParentCheckBox);  
//    }  
    //设置父节点的子节点都可用
    function setChildChecked(divID)
    {
      var objchild = divID.children;  
      var count = objchild.length;        
      for(var i=0;i<objchild.length;i++)  
      {  
        var tempObj = objchild[i];  
        if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")  
        {  
            tempObj.checked = true;  
        }  
        setChildChecked(tempObj);                                  
      }  
    }
    //设置节点的子节点uncheched,权限树的规则二:该节点不可访问,则能访问他的子节点(递归)  
    function setChildUnChecked(divID)  
    {    
      var objchild = divID.children;  
      var count = objchild.length;        
      for(var i=0;i<objchild.length;i++)  
      {  
        var tempObj = objchild[i];  
        if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")  
        {  
            tempObj.checked = false;  
        }  
        setChildUnChecked(tempObj);                                  
      }  
    }  
    //触发事件,  
    function doCheck()  
    {  
           
        var objNode = public_getEventTarget(); 
        var objID = objNode.getAttribute("ID");  
        var objID = objID.substring(0,objID.indexOf("CheckBox"));   
        var objParentDiv = public_getElementByID(objID+"Nodes");            
        if(objNode.tagName!="INPUT" || objNode.type!="checkbox")
        { 
            return;
        }  
        if(objNode.checked==true)  
        {  
         
          if(objParentDiv==null || objParentDiv == "undefined")  
          {  
            return;  
          }   
//          setParentChecked(objNode); 
          setChildChecked(objParentDiv) ;
        }  
        else  
        {     
          if(objParentDiv==null || objParentDiv == "undefined")  
          {  
            return;  
          } 
//          setParentChecked(objNode);              
          setChildUnChecked(objParentDiv);  
        }  
    }