DavidJGu's Blog

       尼采说,宁可追求虚无也不能无所追求!  Keeping is harder than winning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

客户端脚本实现单击TreeView中节点时执行单击事件(转)

Posted on 2005-09-12 19:08  Let's DotNet  阅读(2664)  评论(1)    收藏  举报

From: http://fnstudio.blogchina.com/

函数名称:CheckNode(currentNode)、ParentNode(currentNode)、ChildNode(currentNode)
创建日期:2005-02-02
函数功能:实现带checkbox的treeview中
     1、选中父结点其子结点也全部选中
     2、取消全部子结点的选择后,父结点的选择也随之取消
使用方法:
     1、在<head></head>中间添加CheckNode(currentNode)、ParentNode(currentNode)、ChildNode(currentNode)
     2、在*.aspx.cs的Page_load()事件中添加yourTreeView.Attribute.Add("OnCheck","CheckNode(yourTreeView.getTreeNode(yourTreeView.clickedNodeIndex))")


<script language="javascript">
  /*
  函数名称:CheckNode(currentNode)、ParentNode(currentNode)、ChildNode(currentNode)
  创建日期:2005-02-02
  函数功能:实现带checkbox的treeview中
     1、选中父结点其子结点也全部选中
     2、取消全部子结点的选择后,父结点的选择也随之取消
  使用方法:1、在<head></head>中间添加CheckNode(currentNode)、ParentNode(currentNode)、ChildNode(currentNode)
     2、在*.aspx.cs的Page_load()事件中添加yourTreeView.Attribute.Add("OnCheck","CheckNode(yourTreeView.getTreeNode(yourTreeView.clickedNodeIndex))")
  */
  
  
  //递归遍历所有子节点
  function CheckNode(currentNode)
  {
   var childNode=new Array();
   var parentNodeChild=new Array();
   var isChecked;
   childNode=currentNode.getChildren();
   if(currentNode.getAttribute('checked'))
   {
    isChecked=true;
   }
   else
   {
    isChecked=false;
   }
   //父节点处理
   if(currentNode.getParent()!=null)
   {
    //选中处理
    if(currentNode.getAttribute('Checked'))
    {
     ParentNode(currentNode);
    }
    else
    //取消选中
    {
     ChildNode(currentNode);
    }
   }
   else
   {
    //什么也不做
   }
   //子节点处理
   if(childNode.length>0)
   {
    for(var i=0;i<childNode.length;i++)
    {
     childNode[i].setAttribute("Checked",isChecked);
     if(childNode[i].getChildren().length>0)
     {
      CheckNode(childNode[i]);
     }
    }
   }
  }
  //递归选中父节点
  function ParentNode(currentNode)
  {
   if(currentNode.getParent()!=null)
   {
    currentNode.getParent().setAttribute('Checked',true);
    //递归调用ParentNode(currentNode)以遍历更上一层的父节点
    ParentNode(currentNode.getParent());
   }
  }
  //递归取消选中父节点
  function ChildNode(currentNode)
  {
   if(currentNode.getParent()!=null)
   {
    var checkedCount=0;
    var childNode=currentNode.getParent().getChildren();
    for (var i=0;i<childNode.length;i++)
    {
     if(childNode[i].getAttribute('Checked'))
     {
      checkedCount++;
     }
    }
    if(checkedCount==0)
    {
     currentNode.getParent().setAttribute('Checked',false);
    }
    //递归调用ChildNode(currentNode)以遍历更上一层的父节点
    ChildNode(currentNode.getParent());
   }
  }  
  </script>