這里使用asp.net2.0的treeview控件結(jié)合javascript實現(xiàn)權(quán)限樹的部分功能。
假設(shè)權(quán)限樹中有如下三條規(guī)則:
1、該節(jié)點可以訪問,則他的父節(jié)點也必能訪問;
2、該節(jié)點可以訪問,則他的子節(jié)點也都能訪問;
3、該節(jié)點不可訪問,則他的子節(jié)點也不能訪問。
代碼如下:
//獲取元素指定tagname的父元素
function public_getparentbytagname(element, tagname)
{
var parent = element.parentnode;
var uppertagname = tagname.touppercase();
//如果這個元素還不是想要的tag就繼續(xù)上溯
while (parent && (parent.tagname.touppercase() != uppertagname))
{
parent = parent.parentnode ? parent.parentnode : parent.parentelement;
}
return parent;
}
//設(shè)置節(jié)點的父節(jié)點cheched——該節(jié)點可訪問,則他的父節(jié)點也必能訪問
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);
}
//設(shè)置節(jié)點的子節(jié)點uncheched——該節(jié)點不可訪問,則他的子節(jié)點也不能訪問
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);
}
}
//設(shè)置節(jié)點的子節(jié)點cheched——該節(jié)點可以訪問,則他的子節(jié)點也都能訪問
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);
}
}
//觸發(fā)事件
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()");
新聞熱點
疑難解答
圖片精選