Di sini, kontrol TreeView dari asp.net2.0 digunakan bersama dengan JavaScript untuk mengimplementasikan beberapa fungsi pohon izin.
Asumsikan ada tiga aturan berikut di pohon izin:
1. Jika node dapat diakses, maka node induknya juga harus dapat diakses;
2. Jika node dapat diakses, node turunannya juga dapat diakses;
3. Jika node tidak dapat diakses, node turunannya juga tidak dapat diakses.
Kodenya adalah sebagai berikut:
//Dapatkan elemen induk dari tagName yang ditentukan
fungsi public_GetParentByTagName(elemen, tagName)
{
var induk = elemen.parentNode;
var upperTagName = tagName.toUpperCase();
//Jika elemen ini bukan tag yang diinginkan, lanjutkan menelusuri
while (induk && (parent.tagName.toUpperCase() != upperTagName))
{
induk = induk.parentNode ? induk.parentNode : induk.parentElement;
}
kembalikan orang tua;
}
//Mengatur node induk dari node tersebut menjadi Cheched - jika node tersebut dapat diakses, maka node induknya juga harus dapat diakses
fungsi setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "tidak terdefinisi")
{
kembali;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Node"));
objID = objID+"Kotak Centang";
var objParentCheckBox = dokumen.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "tidak terdefinisi")
{
kembali;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "kotak centang")
kembali;
objParentCheckBox.diperiksa = benar;
setParentChecked(objParentCheckBox);
}
//Setel simpul anak dari simpul tersebut agar tidak dicentang - jika simpul tersebut tidak dapat diakses, simpul turunannya juga tidak akan dapat diakses.
fungsi setChildUnChecked (divID)
{
var objchild = divID.anak;
var count = objchild.panjang;
for(var i=0;i<objchild.panjang;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "kotak centang")
{
tempObj.diperiksa = false;
}
setChildUnChecked(tempObj);
}
}
//Atur node anak dari node tersebut ke dalam cheched - jika node tersebut dapat diakses, maka node turunannya juga dapat diakses
fungsi setChildChecked (divID)
{
var objchild = divID.anak;
var count = objchild.panjang;
for(var i=0;i<objchild.panjang;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "kotak centang")
{
tempObj.diperiksa = benar;
}
setChildChecked(tempObj);
}
}
// peristiwa pemicu
fungsi Periksa Acara()
{
var objNode = acara.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="kotak centang")
kembali;
jika(objNode.diperiksa==benar)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("Kotak Centang"));
var objParentDiv = document.getElementById(objID+"Node");
if(objParentDiv==null || objParentDiv == "tidak terdefinisi")
{
kembali;
}
setChildChecked(objParentDiv);
}
kalau tidak
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("Kotak Centang"));
var objParentDiv = document.getElementById(objID+"Node");
if(objParentDiv==null || objParentDiv == "tidak terdefinisi")
{
kembali;
}
setChildUnChecked(objParentDiv);
}
}
Kemudian ikat TreeView ke event js di event page_load:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");