Abstract: ASP.NET TreeView control linkage parent-child check box check
后置代码: this.TreeView1.Attributes.Add("onclick", "CheckEvent();");
JS code:
function setParentState(objNode) {
var objParentDiv = WebForm_GetParentByTagName(objNode, "div");
if (objParentDiv == null || objParentDiv == "undefined")
return;
var divID = objParentDiv.getAttribute("ID");
var prefix = divID.substring(0, divID.indexOf("Nodes"));
var parentID = prefix + "CheckBox";
var parentChk = document.getElementById(parentID);
if (parentChk == null || parentChk == "undefined")
return;
if (objNode.checked) {
parentChk.checked = true;
}
else {
if (isAllChildrenUnChecked(parentChk)) {
parentChk.checked = false;
}
}
setParentState(parentChk);
}
function setChildState (objNode) // child control state set
{
var = objNode.getAttribute the nodeID ( "ID"); // chkBox ID
var prefix nodeID.substring = (0, nodeID.indexOf ( "the CheckBox")); // prefix node
var childrenDiv = document.getElementById (prefix + " nodes");
if (childrenDiv == null || childrenDiv == "undefined")
return;
var childrenArray = childrenDiv.children; // get all the child controls
for (var I = 0; I <childrenArray.length; I ++) {
var = childrenArray Container [I]; // container child controls
var chk = WebForm_GetElementByTagName (container, " input"); // Check to find control, since only Input control one kind, that is, the CheckBox
chk.checked = objNode.checked;
setChildState (chk);
}
}
function isAllChildrenUnChecked(objChk) {
var objChkID = objChk.getAttribute("ID");
var prefix = objChkID.substring(0, objChkID.indexOf("CheckBox")); //节点的前缀
var childrenDiv = document.getElementById(prefix + "Nodes");
if (childrenDiv == null || childrenDiv == "undefined")
return;
var childrenArray = childrenDiv.children; // get all the child controls
for (var I = 0; I <childrenArray.length; I ++) {
var = childrenArray Container [I]; // container child controls
var chk = WebForm_GetElementByTagName (container, " input"); // Check to find control, since only one kind Input control is CheckBox
if (chk.checked)
return false;
}
return true;
}
// trigger event
function CheckEvent () {
var objNode = event.srcElement;
if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
return;
// set the sub-Chk state
setChildState (objNode);
// Set the parent Chk state
setParentState (objNode);
}
Original: Big Box ASP.NET TreeView control linkage parent-child check box check