随笔 - 56  文章 - 27 评论 - 33 阅读 - 99855
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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   朱胜  阅读(648)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示