Asp.Net2.0权限树中Checkbox的操作

  这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能。

  假设权限树中有如下三条规则:

  1、该节点可以访问,则他的父节点也必能访问;

  2、该节点可以访问,则他的子节点也都能访问;

  3、该节点不可访问,则他的子节点也不能访问。

  代码如下:

  //获取元素指定tagName的父元素

  function public_GetParentByTagName(element, tagName)

  {

  var parent = element.parentNode;

  var upperTagName = tagName.toUpperCase();

  //如果这个元素还不是想要的tag就继续上溯

  while (parent && (parent.tagName.toUpperCase() != upperTagName))

  {

  parent = parent.parentNode ? parent.parentNode : parent.parentElement;

  }

  return parent;

  }

  //设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问

  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);

  }

  //设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问

  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);

  }

  }

  //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问

  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()

  {

  var objNode = event.srcElement;

  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

  {

  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);

  }

  }

  然后在page_load事件中将TreeView与js事件绑定上:

  this.TreeView1.Attributes.Add("onclick", "CheckEvent()");