none
在JavaScript中如何判断TreeView当前节点的子节点个数? RRS feed

  • 问题

  • 如题!

    代码如下,希望在代码中注释掉的地方,如果节点的子节点个数>0,再进行提示,大家帮帮忙,谢谢!

    function Client_OnTreeNodeChecked(evt) {
      var obj = getCurrentNode(evt); 
        var treeNodeFound = false; var checkedState; if (obj.tagName == "INPUT" && obj.type == "checkbox") { checkedState = obj.checked; // if (obj.Children.length > 0) // { var r = confirm(MyRes.UpdateAllChildNode); if (r == true) { var curNode = getParentNode(obj); changeNodeState(curNode, checkedState); } // } } }

    2010年10月14日 9:23

答案

  • <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True" ImageSet="BulletedList" ShowExpandCollapse="False" onclick="javascript:return postBackByObject()"> 
         <ParentNodeStyle Font-Bold="False" /><HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /> 
    
         <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" /> 
    
          <Nodes>
            <asp:TreeNode Text="中国" Value="中国">
              <asp:TreeNode Text="河南" Value="河南">
                <asp:TreeNode Text="南阳" Value="南阳"></asp:TreeNode>
                <asp:TreeNode Text="安阳" Value="安阳"></asp:TreeNode>
                <asp:TreeNode Text="信阳" Value="信阳"></asp:TreeNode>
              </asp:TreeNode>
              <asp:TreeNode Text="河北" Value="河北"></asp:TreeNode>
              <asp:TreeNode Text="山东" Value="山东"></asp:TreeNode>
            </asp:TreeNode>
          </Nodes>
    
          <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /> 
    
       </asp:TreeView> 
    
    
    
    <script language="javascript" type="text/javascript"> 
    
        function postBackByObject() { 
    
           var o = window.event.srcElement; 
    
          if (o.tagName == "INPUT" && o.type == "checkbox") //点击treeview的checkbox是触发 
    
           { 
             var d = o.id; //获得当前checkbox的id; 
    
            var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点div的id 
    
            var div = window.document.getElementById(e); //获得div对象 
    
            if (div != null) //如果不为空则表示,存在自节点 
    
             {
               var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记
               alert(check.length);
              for (i = 0; i < check.length; i++) { 
    
                if (check[i].type == "checkbox") //如果是checkbox 
    
                { 
    
                  check[i].checked = o.checked; //字节点的状态和父节点的状态相同,即达到全选 
    
               } 
               } 
    
             } 
    
             else //点子节点的时候,使父节点的状态改变,即不为全选 
    
            { 
               var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div 
    
             var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id 
    
     
              var checkbox = divid.getElementsByTagName("INPUT"); //获取所有子节点数 
    
             var s = 0; 
    
               for (i = 0; i < checkbox.length; i++) { 
    
               if (checkbox[i].checked) //判断有多少子节点被选中 
    
                { 
    
                  s++; 
    
               } 
    
             } 
    
     
    
              if (s == checkbox.length) //如果全部选中 或者 选择的是另外一个根节点的子节点 , 
    
               {                //  则开始的根节点的状态仍然为选中状态 
    
                window.document.getElementById(id).checked = true; 
    
             } 
    
               else {                //否则为没选中状态 
    
               window.document.getElementById(id).checked = false; 
    
             } 
    
     
    
            } 
    
     
    
         } 
    
      
    
        } 
    
      </script> 
    

    http://blog.csdn.net/zx13525079024
    • 已建议为答案 大力Bober 2010年10月15日 6:22
    • 已标记为答案 hugo.sheh 2010年10月23日 7:39
    2010年10月14日 10:43

全部回复

  • <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True" ImageSet="BulletedList" ShowExpandCollapse="False" onclick="javascript:return postBackByObject()"> 
         <ParentNodeStyle Font-Bold="False" /><HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /> 
    
         <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" /> 
    
          <Nodes>
            <asp:TreeNode Text="中国" Value="中国">
              <asp:TreeNode Text="河南" Value="河南">
                <asp:TreeNode Text="南阳" Value="南阳"></asp:TreeNode>
                <asp:TreeNode Text="安阳" Value="安阳"></asp:TreeNode>
                <asp:TreeNode Text="信阳" Value="信阳"></asp:TreeNode>
              </asp:TreeNode>
              <asp:TreeNode Text="河北" Value="河北"></asp:TreeNode>
              <asp:TreeNode Text="山东" Value="山东"></asp:TreeNode>
            </asp:TreeNode>
          </Nodes>
    
          <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /> 
    
       </asp:TreeView> 
    
    
    
    <script language="javascript" type="text/javascript"> 
    
        function postBackByObject() { 
    
           var o = window.event.srcElement; 
    
          if (o.tagName == "INPUT" && o.type == "checkbox") //点击treeview的checkbox是触发 
    
           { 
             var d = o.id; //获得当前checkbox的id; 
    
            var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点div的id 
    
            var div = window.document.getElementById(e); //获得div对象 
    
            if (div != null) //如果不为空则表示,存在自节点 
    
             {
               var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记
               alert(check.length);
              for (i = 0; i < check.length; i++) { 
    
                if (check[i].type == "checkbox") //如果是checkbox 
    
                { 
    
                  check[i].checked = o.checked; //字节点的状态和父节点的状态相同,即达到全选 
    
               } 
               } 
    
             } 
    
             else //点子节点的时候,使父节点的状态改变,即不为全选 
    
            { 
               var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div 
    
             var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id 
    
     
              var checkbox = divid.getElementsByTagName("INPUT"); //获取所有子节点数 
    
             var s = 0; 
    
               for (i = 0; i < checkbox.length; i++) { 
    
               if (checkbox[i].checked) //判断有多少子节点被选中 
    
                { 
    
                  s++; 
    
               } 
    
             } 
    
     
    
              if (s == checkbox.length) //如果全部选中 或者 选择的是另外一个根节点的子节点 , 
    
               {                //  则开始的根节点的状态仍然为选中状态 
    
                window.document.getElementById(id).checked = true; 
    
             } 
    
               else {                //否则为没选中状态 
    
               window.document.getElementById(id).checked = false; 
    
             } 
    
     
    
            } 
    
     
    
         } 
    
      
    
        } 
    
      </script> 
    

    http://blog.csdn.net/zx13525079024
    • 已建议为答案 大力Bober 2010年10月15日 6:22
    • 已标记为答案 hugo.sheh 2010年10月23日 7:39
    2010年10月14日 10:43
  • 谢谢楼上的回复,问题已经解决,Thanks..
    2010年10月14日 13:16