1. 前台JS

(1)在head标签中添加   

 <script type="text/javascript">
      

 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;
    }

    function setParentChecked(objNode)
    {
         var objParentDiv = public_GetParentByTagName(objNode,"div");
         if(objParentDiv==null || objParentDiv == "undefined")
         {
             return;
         }
         var objID = objParentDiv.getAttribute("ID");
         objID = objID.substring(0,objID.indexOf("Nodes"));
         objID = objID+"CheckBox";
         var objParentCheckBox = document.getElementById(objID);
         if(objParentCheckBox==null || objParentCheckBox == "undefined")
         {
             return;
         }
         if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
         return;
         objParentCheckBox.checked = true;
         setParentChecked(objParentCheckBox);
    }
   
    function setParentUnChecked(objNode)
    {
         //获取父节点类
         var objParentDiv = public_GetParentByTagName(objNode,"div");
         if(objParentDiv==null || objParentDiv == "undefined")
         {
             return;
         }                 
         var objID = objParentDiv.getAttribute("ID");
         var parentIndex = parseFloat(objID.substr(objID.indexOf("Nodes") - 1,1));        
         objID = objID.substring(0,objID.indexOf("Nodes") -1);
       
         var hasChildChecked = false;
         var objchild = objParentDiv.children;//获取父节点类所有子节点
         for(var i=1;i<=objchild.length;i++)
         {
             var childObjID = objID +(parentIndex + i) + "CheckBox";
             var tmpObj = document.getElementById(childObjID);
            if(tmpObj.checked == true)
            {                  
                 hasChildChecked = true;
            }
         }
        
         //如果所有子节点都没有选中,将父节点选择取消
         if(hasChildChecked == false)
         {
             objID = objID + parentIndex +"CheckBox";
             var objParentCheckBox = document.getElementById(objID);
             if(objParentCheckBox==null || objParentCheckBox == "undefined")
             {
                 return;
             }
             if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
             return;
             objParentCheckBox.checked = false;
             setParentUnChecked(objParentCheckBox);
         } 

    }
   
    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 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);
         }
    }

    //触发事件
    function CheckEvent(event)
    {
         var evt = event ? event : (window.event ? window.event : null);
         var objNode =  evt.srcElement ? evt.srcElement : evt.target;

         if(objNode.tagName!="INPUT" || objNode.type!="checkbox")
         return;
            
         if(objNode.checked==true)
         {
             setParentChecked(objNode);
             var objID = objNode.getAttribute("ID");
             var objID = objID.substring(0,objID.indexOf("CheckBox"));
             var objParentDiv = document.getElementById(objID+"Nodes");
             if(objParentDiv==null || objParentDiv == "undefined")
             {
                 return;
             }
             setChildChecked(objParentDiv);
         }
         else
         {
             setParentUnChecked(objNode);//检查是否要取消父节点勾选项
                         
             var objID = objNode.getAttribute("ID");
             var objID = objID.substring(0,objID.indexOf("CheckBox"));
             var objParentDiv = document.getElementById(objID+"Nodes");
                         
             if(objParentDiv==null || objParentDiv == "undefined")
             {
                 return;
             }
             setChildUnChecked(objParentDiv);
         }
    }

    </script>

(2)在body标签中添加兼容Firefox的Children支持

       <script type="text/javascript">
        //让FireFox兼容支持Children属性
            HTMLElement.prototype.__defineGetter__("children",
            function () {
                var returnValue = new Object();
                var number = 0;
                for (var i=0; i<this.childNodes.length; i++) {
                if (this.childNodes[i].nodeType == 1) {
                returnValue[number] = this.childNodes[i];
                number++;
                }
                }
                returnValue.length = number;
                return returnValue;
                }
            );
        </script>

2. 后台在Page_Load事件中加入:this.TreeView1.Attributes.Add("onclick", "CheckEvent()"):

posted on 2008-09-27 16:19  朱胜  阅读(647)  评论(1编辑  收藏  举报