81,094
社区成员
发帖
与我相关
我的任务
分享
// 生成 checkbox :
<%
for(int i=0;i<list.size();i++){
%>
<input name="parentA<%=i%>" ... onclick= "selectCheckBox(this,'checkboxA',list.size())">..</input>
<% } %>
function selectCheckBox(selectId ,parentCheck, sonCheckBoxlength){
// 将所有的子节点复选框存在 array 里面,以便检索所有的子节点复选框
var array = new Array();
for(var i=0;i<sonCheckBoxlengthi++){
var sonCheckBoxS=document.getElementsByName("parentA"+i);
array[i] = sonCheckBoxS;
}
...... // 下面的做法类似
}
<input name='parentA1' type='checkbox' value='D' onclick="selectCheckBox(this, 'checkboxA', 'parentA1','parentA2')">D</input>
<input id='checkboxA' type='checkbox' value='A' disabled='true'>A</input>
<input id='checkboxB' type='checkbox' value='B' disabled='true'>B</input>
<input id='checkboxC' type='checkbox' value='C' disabled='true'>C</input>
<BR/>
<input name='parentA1' type='checkbox' value='D' onclick="selectCheckBox(this, 'checkboxA', 'parentA1','parentA2')">D</input>
<input name='parentA1' type='checkbox' value='E' onclick="selectCheckBox(this, 'checkboxA', 'parentA1','parentA2')">E</input>
<input name='parentA1' type='checkbox' value='F' onclick="selectCheckBox(this, 'checkboxA', 'parentA1','parentA2')">F</input>
<BR/>
<input name='parentA2' type='checkbox' value='a' onclick="selectCheckBox(this, 'checkboxA', 'parentA1', 'parentA2')">a</input>
<input name='parentA2' type='checkbox' value='b' onclick="selectCheckBox(this, 'checkboxA', 'parentA1', 'parentA2')">b</input>
<script>
function selectCheckBox(selectId ,parentCheck, sonCheckName1 ,sonCheckName2){
var arr1=document.getElementsByName(sonCheckName1); // 第一个子节点下的所有复选框
var arr2 = document.getElementsByName(sonCheckName2); // 第二个子节点下的所有复选框
// 将所有的子节点复选框存在 array 里面,以便检索所有的子节点复选框
var array = new Array();
array[0] = arr1;
array[1] = arr2;
var parentCheck = document.getElementById(parentCheck); // 对应的父节点
if(selectId.checked==true){
// 当这个节点被选中时,父节点同时被选中
parentCheck.checked=true;
}else{
// 如果没有被选中,则判断是否有其他子节点的复选框被选中
var flag = false; // 这里不能放在循环里面
for(var j=0;j<array.length;j++){
var arr = array[j];
if(flag && j==(array.length-1)){
// 如果有子节点的复选框被选中,且所有子节点的复选框已检索完毕,则跳出循环
break;
}else if(!flag && j==(array.length-1)){
// 如果所有子节点的复选框已检索完后 flag == false,则表示没有一个子节点复选框被选中,则父节点的复选框也不会被选中
parentCheck.checked=false;
}
for(var i=0;i<arr.length;i++){
if(arr[i].checked == true){
parentCheck.checked=true;
// 如果有子节点的复选框被选中,则跳出此循环
flag = true;
}
// 这里不要 else 的操作就可以了。
}
}
}
}
</script>