TreeView中CheckBox的级联选择
<div id="cnblogs_post_body"><div class="cnblogs_code"> 1 //如果父节点选中,则所有子结点跟着选中 2 function onTreeNodeChecked() //点击treeview时的入口函数 3 { 4 var ele = event.srcElement; 5 if(ele.type == 'checkbox') { 6 var childrenDivID = ele.id.replace('CheckBox', 'Nodes'); 7 var div = document.getElementById(childrenDivID); 8 if(ele.checked == false) { //如果取消选中checkbox则取消其所有的上级节点 9 var parentCheckbox = getParentCheckbox(ele);10 while(parentCheckbox != null) {11 parentCheckbox.checked = false;12 parentCheckbox = getParentCheckbox(parentCheckbox);13 }14 } else { //如果选中checkbox,先判断其兄弟checkbox是否选中,若全部选中则选中其父checkbox15 var objCheckbox = ele;16 while(objCheckbox != null) {17 var parentDiv = getParentDiv(objCheckbox);18 var childCheckbox = parentDiv.childNodes;19 var totalCheckbox = 0,20 checkedCheckbox = 0;21 for(var k = 0; k < childCheckbox.length; k++) {22 if(childCheckbox.attributes == null || childCheckbox.tagName != "TABLE") continue;23 var objInputs = childCheckbox.getElementsByTagName('INPUT');24 for(var j = 0; j < objInputs.length; j++) {25 if(objInputs.type == 'checkbox') {26 totalCheckbox++;27 if(objInputs.checked == true) checkedCheckbox++;28 }29 }30 }31 objCheckbox = getParentCheckbox(objCheckbox);32 if(totalCheckbox == checkedCheckbox) {33 if(objCheckbox != null) objCheckbox.checked = true;34 }35 }36 }37 if(div == null) return;38 var checkBoxs = div.getElementsByTagName('INPUT');39 for(var i = 0; i < checkBoxs.length; i++) {40 if(checkBoxs.type == 'checkbox') checkBoxs.checked = ele.checked;41 }42 }43 }44 45 //obj为checkbox,获取obj父级checkbox,若无则返回null46 function getParentCheckbox(obj) {47 var parent = obj.parentNode;48 var upperTagName = "DIV";49 while(parent != null && (parent.tagName.toUpperCase() != upperTagName)) {50 parent = parent.parentNode ? parent.parentNode : parent.parentElement;51 }52 53 if(parent != null && parent != "undefined") {54 var pCheckbox = document.getElementById(parent.id.replace('Nodes', 'CheckBox'));55 if(pCheckbox != null && pCheckbox != "undefined") return pCheckbox;56 }57 return null;58 }59 60 function getParentDiv(obj) {61 var parent = obj.parentNode;62 var upperTagName = "DIV";63 while(parent != null && (parent.tagName.toUpperCase() != upperTagName)) {64 parent = parent.parentNode ? parent.parentNode : parent.parentElement;65 }66 return parent;67 }
页:
[1]