这里使用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()");
新闻热点
疑难解答
图片精选