.Net 的 Web 项目中 关于TreeView 的 checkBox 的操作……

XX.aspx页面中: 

<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" Style="left: 24px;
            position: relative; top: 56px" οnclick="client_OnTreeNodeChecked(event);" ShowLines="True"  meta:resourcekey="TreeViewModulesResource1" ImageSet="BulletedList4"   ExpandDepth="0" Target="middle">
            <Nodes>
               
<asp:TreeNode Text="教育" Value="教育">
                   
<asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                   
<asp:TreeNode Text="222" Value="222"></asp:TreeNode>
               
</asp:TreeNode>
               
<asp:TreeNode Text="新闻" Value="新闻">
                   
<asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                   
<asp:TreeNode Text="222" Value="222"></asp:TreeNode>
               
</asp:TreeNode>
               
<asp:TreeNode Text="体育" Value="体育">
                   
<asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                   
<asp:TreeNode Text="222" Value="222"></asp:TreeNode>
               
</asp:TreeNode>
           
</Nodes>
       
</asp:TreeView>

页面js 实现:
 <script language="javascript"type="text/javascript">
        //TreeView onclick 触发事件
function client_OnTreeNodeChecked(event)
{
    //得到当前所 Click 的对象
    var objNode;
    if(!public_IsObjectNull(event.srcElement))
    {
        //IE
        objNode = event.srcElement;
    }
    else
    {
        //FF
        objNode = event.target;
    }
 
    //判断是否 Click 的 CheckBox
    if(!public_IsCheckBox(objNode))
        return;
 
    var objCheckBox = objNode;
    //根据CheckBox状态进行相应处理
    if(objCheckBox.checked==true)
    {
        //递归选中父节点的 CheckBox
        setParentChecked(objCheckBox);
        
        //递归选中所有的子节点
        setChildChecked(objCheckBox);
    }
    else
    {        
        //递归取消选中所有的子节点
        setChildUnChecked(objCheckBox);
        
        //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中).
        setParentUnChecked(objCheckBox);
    }
}
 
//判断对象是否为空
function public_IsObjectNull(element)
{
    if(element==null || element == "undefined")
        return true;
    else
        return false;
}
 
//判断对象是否为 CheckBox
function public_IsCheckBox(element)
{
    if(public_IsObjectNull(element))
        return false;
        
    if(element.tagName!="INPUT" || element.type!="checkbox")
        return false;
    else
        return true;
}
//得到包含所有子节点的 Node(Div 对象)
function public_CheckBox2Node(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("CheckBox")); 
    return document.getElementById(objID+"Nodes");
}
//得到父节点的 CheckBox
function public_Node2CheckBox(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("Nodes")); 
    return document.getElementById(objID+"CheckBox");
}
//得到本节点所在的 Node(Div 对象)
function public_GetParentNode(element) 
{
    var parent = element.parentNode;
    var upperTagName = "DIV";
    //如果这个元素还不是想要的 tag 就继续上溯
    while (parent && (parent.tagName.toUpperCase() != upperTagName)) 
    {
        parent = parent.parentNode ? parent.parentNode : parent.parentElement;
    }
    return parent;
}
 
 
//设置节点的父节点 Checked
function setParentChecked(currCheckBox)

    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;    
    
    var objParentCheckBox = public_Node2CheckBox(objParentNode);
 
    if(!public_IsCheckBox(objParentCheckBox))
        return; 
        
    objParentCheckBox.checked = true;
    setParentChecked(objParentCheckBox);
}
 
//当父节点的所有子节点都未被选中时,设置父节点 UnChecked
function setParentUnChecked(currCheckBox)
{
    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;   
    //判断 currCheckBox 的同级节点是否都为 UnChecked.
    if(!IsMyChildCheckBoxsUnChecked(objParentNode))
        return;    
    
    var objParentCheckBox = public_Node2CheckBox(objParentNode);
 
    if(!public_IsCheckBox(objParentCheckBox))
        return; 
        
    objParentCheckBox.checked = false;    
    setParentUnChecked(objParentCheckBox);
}
 
//设置节点的子节点 UnChecked
function setChildUnChecked(currObj)
{
    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
       
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i <count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = false;
        }
        setChildUnChecked(childCheckBox); 
    }
}
 
//设置节点的子节点 Checked
function setChildChecked(currObj)

    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
        
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i <count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = true;
        }
        setChildChecked(childCheckBox); 
    }
}
 
//判断该节点的子节点是否都为 UnChecked
function IsMyChildCheckBoxsUnChecked(currObj)
{
    var retVal = true;
    
    var currNode;
    if(public_IsCheckBox(currObj) && currObj.checked == true)
    {
        return false;
    }
    else
        currNode = currObj;
       
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i <count;i++)
    {
        if (retVal == false)
            break;
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
        {
            retVal = false;
            return retVal;
        }
        else
            retVal = IsMyChildCheckBoxsUnChecked(childCheckBox);         
    }
    return retVal;

同时实现全选:

Html:

<script type="text/javascript" language="javascript" src="JS/TreeView2.js"></script>
   
   
<script language ="javascript" type="text/javascript">
   
function OnTreeNodeChecked()
    {
       
var element = window.event.srcElement;
       
if (!IsCheckBox(element))
           
return;

       
var isChecked = element.checked;
       
var tree = TV2_GetTreeById("Product_tree");
       
var node = TV2_GetNode(tree,element);

        TV2_SetChildNodesCheckStatus(node,isChecked);

       
var parent = TV2_GetParentNode(tree,node);
        TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);

    }
  
</script>
<script type="text/javascript">
         
function chkAll()
        {
           
//debugger;
          var chkall= document.all["chkall"];
         
var chkother= document.getElementsByTagName("input");
           
for (var i=0;i<chkother.length;i++)
           {
                
if( chkother[i].type=='checkbox')
              {
                 
if(chkother[i].id.indexOf('Product_tree')>-1)
                  {
                      
if(chkall.checked==true)
                       {
                           chkother[i].checked
=true;
                     }
                     
else
                   {
                           chkother[i].checked
=false;
                        }
                    }
                 }
            }
       }
   
</script>

<html>
<table id="Table1" cellspacing="0" cellpadding="0" width="100%" border="0"   >
                                   
<tr >
                                       
<td align="left" colspan="2" height="34" style="height: 28px; background-color: aliceblue"
                                            valign
="middle">
                                           
&nbsp; <strong>
                                                地区定向
                                           
</strong>
                                       
</td>
                                   
</tr>
                                   
<tr >
                                       
<td >
                                        
<input id="chkall" type="checkbox"  onclick="chkAll();" />全选/取消
                                       
</td>
                                   
</tr>
                                   
<tr>
                                   
<td >
                                    
                                   
<asp:TreeView ID="Product_tree" runat="server" ShowCheckBoxes="All"  OnClick="OnTreeNodeChecked()" >
                                       
</asp:TreeView>
                                   
                                   
</td>
                                   
</tr>
                                   
</table>
</htmL>

TreeView2.js:

/***************************************************************************************
Name: Client Javascript for ASP.NET 2.0 TreeView
Description: ASP.NET 2.0 TreeView lack for client operation. This set of functions provide
    some supports. Includes:
    * get node
    * change checkbox status of parent and child nodes

Author: Zhangtao, zhangtao.it@gmail.com
Date:   2006-03-30
Commonts:
**************************************************************************************
*/

//set child nodes checkbox status
function TV2_SetChildNodesCheckStatus(node,isChecked)
{
   
var childNodes = TV2i_GetChildNodesDiv(node);
   
if(childNodes == null)
       
return;
       
   
var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT");
   
if(inputs == null || inputs.length == 0)
       
return;

   
for(var i = 0; i < inputs.length; i++)
    {
       
if(IsCheckBox(inputs[i]))
            inputs[i].checked
= isChecked; 
    }
}  

//change parent node checkbox status after child node changed
function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked)
{
   
if(node == null)
       
return;
            
   
var childNodes = TV2_GetChildNodes(tree,node);
   
   
if(childNodes == null || childNodes.length == 0)
       
return;   
   
   
var isAllSame = true;

   
for(var i = 0; i < childNodes.length; i++)
    {
       
var item = childNodes[i];
       
var value = TV2_NodeGetChecked(item);
       
       
if(isChecked != value)
        {
            isAllSame
= false;
           
break;
        }
    }

   
var parent = TV2_GetParentNode(tree,node);
   
if(isAllSame)
    {
        TV2_NodeSetChecked(node,isChecked);       
        TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);
    }   
   
else
    {   
        TV2_NodeSetChecked(node,
false); 
        TV2_NodeOnChildNodeCheckedChanged(tree,parent,
false);
    }
}

//get node relative element(etc. checkbox)
function TV2_GetNode(tree,element)
{
   
var id = element.id.replace(tree.id,"");  
    id
= id.toLowerCase().replace(element.type,"");   
    id
= tree.id + id;
   
   
var node = document.getElementById(id);
   
if(node == null) //leaf node, no "A" node
        return element;
   
return node;
}

//get parent node
function TV2_GetParentNode(tree,node)
{
   
var div = WebForm_GetParentByTagName(node,"DIV");
   
   
//The structure of node: <table>information of node</table><div>child nodes</div>
    var table = div.previousSibling;
   
if(table == null)
       
return null;  
  
   
return TV2i_GetNodeInElement(tree,table);
}

//get child nodes array
function TV2_GetChildNodes(tree,node)
{
   
if(TV2_NodeIsLeaf(node))
       
return null;
   
   
var children = new Array();
   
var div = TV2i_GetChildNodesDiv(node);
   
var index = 0;
   
   
for(var i = 0; i < div.childNodes.length; i++)
    {
       
var element = div.childNodes[i];       
       
if(element.tagName != "TABLE")
           
continue;
       
       
var child = TV2i_GetNodeInElement(tree,element);
       
if(child != null)
            children[index
++] = child;
    }
   
return children;
}

function TV2_NodeIsLeaf(node)
{
   
return !(node.tagName == "A"); //Todo
}

function TV2_NodeGetChecked(node)
{
   
var checkbox = TV2i_NodeGetCheckBox(node);  
   
return checkbox.checked;
}

function TV2_NodeSetChecked(node,isChecked)
{
   
var checkbox = TV2i_NodeGetCheckBox(node);
   
if(checkbox != null)
     checkbox.checked
= isChecked;
}

function IsCheckBox(element)
{  
   
if(element == null)
       
return false;
   
return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox");
}

//get tree
function TV2_GetTreeById(id)
{
   
return document.getElementById(id);
}

//
//
private mothods, with TV2i_ prefix
//


//get div contains child nodes
function TV2i_GetChildNodesDiv(node)
{
   
if(TV2_NodeIsLeaf(node))
       
return null;
       
   
var childNodsDivId = node.id + "Nodes";
   
return document.getElementById( childNodsDivId );
}

//find node in element
function TV2i_GetNodeInElement(tree,element)
{
   
var node = TV2i_GetNodeInElementA(tree,element);
   
if(node == null)
    {
        node
= TV2i_GetNodeInElementInput(tree,element);
    }
   
return node;
}

//find "A" node
function TV2i_GetNodeInElementA(tree,element)
{
   
var as = WebForm_GetElementsByTagName(element,"A");
   
if(as== null || as.length == 0)
       
return null;

   
var regexp = new RegExp("^" + tree.id + "n\\d+$");

   
for(var i = 0; i < as.length; i++)
    {
       
if(as[i].id.match(regexp))
        {
           
return as[i];
        }
    }     
   
return null;
}

//find "INPUT" node
function TV2i_GetNodeInElementInput(tree,element)
{
   
var as = WebForm_GetElementsByTagName(element,"INPUT");
   
if(as== null || as.length == 0)
       
return null;
       
   
var regexp = new RegExp("^" + tree.id + "n\\d+");

   
for(var i = 0; i < as.length; i++)
    {
       
if(as[i].id.match(regexp))
        {
           
return as[i];
        }
    }     
   
return null;
}

//get checkbox of node
function TV2i_NodeGetCheckBox(node)
{
   
if(IsCheckBox(node))
       
return node;
       
   
var id = node.id + "CheckBox";
   
return document.getElementById(id);  
}


 

转载于:https://www.cnblogs.com/imghu/archive/2011/08/02/2124544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值