欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-17 11:49:10
  这里使用asp.net2.0的treeview控件结合javascript实现权限树的部分功能。  假设权限树中有如下三条规则:  1、该节点可以访问,则他的父节点也必...

  这里使用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()");