javascrip实现:若选中TreeView的父节点checkbox,则其子节点全部选中;子节点全部没选中,则父节点也会没选中。
<script type="text/javascript"> 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); } function setParentUnChecked(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 = GetChildUnChecked(objParentDiv); setParentUnChecked(objParentCheckBox); } function GetChildUnChecked(divID) { var objchild = divID.getElementsByTagName("INPUT"); var count = objchild.length; for (var i = 0; i < objchild.length; i++) { var tempObj = objchild[i]; if (tempObj.type == "checkbox") { if (tempObj.checked == true) return true; } } return false; } //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能或不能访问 function setChildChecked(divID, objNode) { var objchild = divID.getElementsByTagName("INPUT"); ; var count = objchild.length; for (var i = 0; i < objchild.length; i++) { var tempObj = objchild[i]; if (tempObj.type == "checkbox") { tempObj.checked = objNode.checked; } } } 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") { setChildChecked(objParentDiv, objNode); } } else { setParentUnChecked(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") { setChildChecked(objParentDiv, objNode); } } } </script>
this.tvlist.Attributes.Add("onclick", "CheckEvent()");