zoukankan      html  css  js  c++  java
  • 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()");

  • 相关阅读:
    VS2010版快捷键
    Win7旗舰版中的IIS配置asp.net的运行环境
    实现软件自动在线升级的原理
    view_countInfo
    C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
    error: 40
    SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
    继承实现圆柱体面积体积的计算
    圆柱模板价格计算器V1.0版本
    python3.7内置函数整理笔记
  • 原文地址:https://www.cnblogs.com/jiangyuxuan/p/484151.html
Copyright © 2011-2022 走看看