ที่นี่ การควบคุม TreeView ของ asp.net2.0 ใช้ร่วมกับ JavaScript เพื่อใช้งานฟังก์ชันบางอย่างของแผนผังสิทธิ์
สมมติว่ามีกฎสามข้อต่อไปนี้ในแผนผังสิทธิ์:
1. หากสามารถเข้าถึงโหนดได้ โหนดหลักจะต้องสามารถเข้าถึงได้ด้วย
2. หากสามารถเข้าถึงโหนดได้ ก็สามารถเข้าถึงโหนดย่อยได้เช่นกัน
3. หากไม่สามารถเข้าถึงโหนดได้ โหนดย่อยก็จะไม่สามารถเข้าถึงได้เช่นกัน
รหัสมีดังนี้:
// รับองค์ประกอบหลักของ tagName ที่ระบุ
ฟังก์ชั่น public_GetParentByTagName (องค์ประกอบ tagName)
-
var parent = element.parentNode;
var upperTagName = tagName.toUpperCase();
//หากองค์ประกอบนี้ไม่ใช่แท็กที่ต้องการ ให้ติดตามต่อไป
ในขณะที่ (พาเรนต์ && (parent.tagName.toUpperCase() != upperTagName))
-
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
-
กลับผู้ปกครอง;
}
//ตั้งค่าโหนดหลักของ Cheched - หากโหนดสามารถเข้าถึงได้ โหนดหลักของโหนดนั้นจะต้องสามารถเข้าถึงได้ด้วย
ฟังก์ชั่น setParentChecked (objNode)
-
var objParentDiv = public_GetParentByTagName(objNode,"div");
ถ้า (objParentDiv==null || objParentDiv == "ไม่ได้กำหนด")
-
กลับ;
-
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("โหนด"));
objID = objID+ "ช่องทำเครื่องหมาย";
var objParentCheckBox = document.getElementById(objID);
ถ้า (objParentCheckBox==null || objParentCheckBox == "ไม่ได้กำหนด")
-
กลับ;
-
ถ้า(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "ช่องทำเครื่องหมาย")
กลับ;
objParentCheckBox.checked = จริง;
setParentChecked(objParentCheckBox);
}
//ตั้งค่าโหนดลูกของโหนดโดยไม่ตรวจสอบ - หากโหนดไม่สามารถเข้าถึงได้ โหนดลูกจะไม่สามารถเข้าถึงได้เช่นกัน
ฟังก์ชั่น setChildUnChecked (divID)
-
var objchild = divID.children;
จำนวนนับ = objchild.length;
สำหรับ (var i=0;i<objchild.length;i++)
-
var tempObj = objchild[i];
ถ้า (tempObj.tagName=="INPUT" && tempObj.type == "ช่องทำเครื่องหมาย")
-
tempObj.checked = เท็จ;
-
setChildUnChecked(tempObj);
-
}
// ตั้งค่าโหนดลูกของโหนดที่แคช - หากสามารถเข้าถึงโหนดได้ โหนดย่อยก็สามารถเข้าถึงได้เช่นกัน
ฟังก์ชั่น setChildChecked (divID)
-
var objchild = divID.children;
จำนวนนับ = objchild.length;
สำหรับ (var i=0;i<objchild.length;i++)
-
var tempObj = objchild[i];
ถ้า (tempObj.tagName=="INPUT" && tempObj.type == "ช่องทำเครื่องหมาย")
-
tempObj.checked = จริง;
-
setChildChecked(tempObj);
-
}
//ทริกเกอร์เหตุการณ์
ฟังก์ชั่น CheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="ช่องทำเครื่องหมาย")
กลับ;
ถ้า (objNode.checked==true)
-
setParentChecked (objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("ช่องทำเครื่องหมาย"));
var objParentDiv = document.getElementById(objID+ "โหนด");
ถ้า (objParentDiv==null || objParentDiv == "ไม่ได้กำหนด")
-
กลับ;
-
setChildChecked(objParentDiv);
-
อื่น
-
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("ช่องทำเครื่องหมาย"));
var objParentDiv = document.getElementById(objID+ "โหนด");
ถ้า (objParentDiv==null || objParentDiv == "ไม่ได้กำหนด")
-
กลับ;
-
setChildUnChecked(objParentDiv);
-
}
จากนั้นผูก TreeView กับเหตุการณ์ js ในเหตุการณ์ page_load:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");