TreeView完全解决方案

最近使用TreeView控件来实现权限的管理与分配,遇到了很多问题。使用TreeView控件主要需要解决的问题有:
  1. 控制级联checkbox的选择、同步
  2. 结点点击展开下级结点
问题一的解决可以通过修改TreeView.htc文件来完成:
在TreeView.htc中,找到 doCheckboxClick( ),在其中添加设置其他节点状态的处理方法,如下:
// 
// doCheckboxClick()
//
function doCheckboxClick(el)
{
    el.checked = !el.checked;
    var evt = createEventObject();
    evt.treeNodeIndex = getNodeIndex(el);
    g_nodeClicked = el;
    tvevtCheck.fire(evt);
    setTreeNodeState(el);
}
function setTreeNodeState(el)
{
 var state = private_getAttribute(el,"checked");
 //设置子节点选中
 _setChildNode(el,state);
 //设置父节点选中
 _setParentNode(el,state);
}
//设置子节点状态
function  _setChildNode(el,state)
{
 var childNodes = el.children.tags("treenode");
 if(childNodes.length > 0)
 {// if has childs
  for(var i = 0 ;i<=childNodes.length-1;i++)
  {
   cNode = childNodes[i];
   private_setAttribute(childNodes[i],"Checked",state);
   _saveCheckState(childNodes[i]);
   _setChildNode(childNodes[i],state);
  }
 }
}
function  _setParentNode(el,state)
{
 var parentNode = el.parentElement;
 if(parentNode!=null&&private_getAttribute(parentNode,"tagname")=="treenode")
 {
  if(!_checkSiblingdNode(el))
  {
   private_setAttribute(parentNode,"Checked",state);
   _saveCheckState(parentNode);
   _setParentNode(parentNode,state);
  }
 }
}
function _checkSiblingdNode(el)
{
    var parentNode = el.parentElement;
    var siblingNodes = parentNode.children.tags("treenode");
    for(var i = 0;i<=siblingNodes.length-1;i++)
    {
  var cNode = siblingNodes[i];
  if(el != cNode)
  {
      if(private_getAttribute(cNode,"Checked"))
      {
    return true;
      }
  }
 }
 return false;
}

function _saveCheckState(el)
{
 if(getNodeIndex(el))
  queueEvent('oncheck', getNodeIndex(el));
}
// doCheckboxClick()
//
function doCheckboxClick(el)
{
    el.checked = !el.checked;
    var evt = createEventObject();
    evt.treeNodeIndex = getNodeIndex(el);
    g_nodeClicked = el;
    tvevtCheck.fire(evt);
    setTreeNodeState(el);
}
function setTreeNodeState(el)
{
 var state = private_getAttribute(el,"checked");
 //设置子节点选中
 _setChildNode(el,state);
 //设置父节点选中
 _setParentNode(el,state);
}
//设置子节点状态
function  _setChildNode(el,state)
{
 var childNodes = el.children.tags("treenode");
 if(childNodes.length > 0)
 {// if has childs
  for(var i = 0 ;i<=childNodes.length-1;i++)
  {
   cNode = childNodes[i];
   private_setAttribute(childNodes[i],"Checked",state);
   _saveCheckState(childNodes[i]);
   _setChildNode(childNodes[i],state);
  }
 }
}
function  _setParentNode(el,state)
{
 var parentNode = el.parentElement;
 if(parentNode!=null&&private_getAttribute(parentNode,"tagname")=="treenode")
 {
  if(!_checkSiblingdNode(el))
  {
   private_setAttribute(parentNode,"Checked",state);
   _saveCheckState(parentNode);
   _setParentNode(parentNode,state);
  }
 }
}
function _checkSiblingdNode(el)
{
    var parentNode = el.parentElement;
    var siblingNodes = parentNode.children.tags("treenode");
    for(var i = 0;i<=siblingNodes.length-1;i++)
    {
  var cNode = siblingNodes[i];
  if(el != cNode)
  {
      if(private_getAttribute(cNode,"Checked"))
      {
    return true;
      }
  }
 }
 return false;
}

function _saveCheckState(el)
{
 if(getNodeIndex(el))
  queueEvent('oncheck', getNodeIndex(el));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值