zoukankan      html  css  js  c++  java
  • 【转】Asp.Net TreeView with CheckBox

    1  选择了父节点,则它的所有子节点都选中
    2 只要有一个子节点选中, 其父节点就选中

    <script language="javascript" type="text/javascript">
    function HandleCheckbox()                                           
    {                                                                              
        var element = event.srcElement;                                            
        if (element.tagName == "INPUT" && element.type == "checkbox")              
        {                                                                          
            var checkedState = element.checked;                                   
            while (element.tagName != "TABLE") // Get wrapping table               
            {                                                                      
                element = element.parentElement;                                   
            }                                                                            
            var parentElement = element;
                       
            if(checkedState)
            {
             CheckParents(element);
            } 
                                                                                         
            element = element.nextSibling; //element.tagName = DIV 
                                                                                  
            if (element != null) // If no childrens then exit 
            {                                                                                                     
                var childTables = element.getElementsByTagName("TABLE"); 
                
                for (var tableIndex = 0; tableIndex < childTables.length; tableIndex++)
                {                                                                      
                    CheckTable(childTables[tableIndex], checkedState);      
                } 
            }
            if(checkedState == false)
            {
                UnCheckParents(parentElement);
            }            
                                                                
        }                                                                          
    }                                                                              
                                                                                   
    // Uncheck the parents of the given table, Can remove the recurse (redundant) 
    function CheckParents(table)                                      
    {                                                                              
        if (table == null || table.rows[0].cells.length == 2) // This is the root 
        {                                                                          
            return;                                                                
        }                                                                          
        var parentTable = table.parentElement.previousSibling;
        CheckTable(parentTable, true);                                 
        CheckParents(parentTable);                                    
    }  
    
    // Check the parents of the given table, Can remove the recurse (redundant) 
    function UnCheckParents(table)                                      
    {       
                                                                         
        if (table == null || table.rows[0].cells.length == 2) // This is the root  
        {                                                                          
            return;                                                                
        }                                                                    
        var parentTable = table.parentElement.previousSibling; 
       
        var checkedCount  =GetCheckedCount(table.parentElement);
        if(checkedCount == 0)
        {
            CheckTable(parentTable, false);
        }                                                 
        UnCheckParents(parentTable);                                    
    }                                                                              
                                                                                   
    // Handle the set of checkbox checked state                                    
    function CheckTable(table, checked) 
        {                                                                              
        var checkboxIndex = table.rows[0].cells.length - 1;   
        var cell = table.rows[0].cells[checkboxIndex];  
        var checkboxes = cell.getElementsByTagName("INPUT"); 
        if (checkboxes.length == 1) 
        {                                                                          
            checkboxes[0].checked = checked; 
        } 
                                                                               
    }  
    //Get checked children count
    function GetCheckedCount(table)
    {
        var checkedCount = 0; 
        var element = table.nextSibling;
        var childTable = table.getElementsByTagName("TABLE");
        
        for(var tableIndex = 0;tableIndex < childTable.length; tableIndex++)
        {
            var childTables = childTable[tableIndex];
            var checkboxIndex = childTables.rows[0].cells.length - 1;    
            var cell = childTables.rows[0].cells[checkboxIndex];  
            var checkboxes = cell.getElementsByTagName("INPUT");
            if (checkboxes.length == 1 && checkboxes[0].checked == true)
            {                                                                          
                 checkedCount++;            
            }      
        }   
        return  checkedCount;   
    }                                                                            
     </script>
    
    <asp:TreeView ID="TreeViewModules" runat="server" ShowCheckBoxes="All" onclick="HandleCheckbox();"
            ShowLines="True" ExpandDepth="1" meta:resourcekey="TreeViewModulesResource1"></asp:TreeView>
  • 相关阅读:
    69.广搜练习:  最少转弯问题(TURN)
    51..分治算法练习:  4378 【Laoguo】循环比赛
    50.分治算法练习:  二分算法:  2703 奶牛代理商 XII
    [转载]双向广搜
    49.分治算法练习:  1497 取余运算
    48.贪心练习:  1621 混合牛奶
    47..贪心  失恋28天-追女孩篇
    46.贪心算法练习:  区间合并
    45.分支算法练习:  7622:求排列的逆序数
    44.分治算法练习:  一元三次方程求解
  • 原文地址:https://www.cnblogs.com/gzh4455/p/3075388.html
Copyright © 2011-2022 走看看