DreamParadise 发表于 2012-12-22 21:27:18

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]
查看完整版本: TreeView中CheckBox的级联选择