看看:function CheckboxGroup(){
var arrelement = document.all;
var i=0;
while(i <arrelement.length){
var forgroupattrib = arrelement[i].getAttribute('forcheckboxgroup');
if(forgroupattrib != null && forgroupattrib != ''){
arrelement[i].setAttribute('groupmember',_getGroupMember(arrelement[i]));
if(arrelement[i].tagName.toLowerCase() == 'input' && arrelement[i].type == 'checkbox'){
arrelement[i].onclick=function(){
var groupmember = this.getAttribute('groupmember');
var i = 0;
while(i <groupmember.length){
if(!groupmember[i].disabled)
groupmember[i].checked = this.checked;
i++;
} }
}
_setState(arrelement[i]);
}
i++;
}
}
var arrelement = document.all;
var i=0;
while(i <arrelement.length){
var forgroupattrib = arrelement[i].getAttribute('forcheckboxgroup');
if(forgroupattrib != null && forgroupattrib != ''){
arrelement[i].setAttribute('groupmember',_getGroupMember(arrelement[i]));
if(arrelement[i].tagName.toLowerCase() == 'input' && arrelement[i].type == 'checkbox'){
arrelement[i].onclick=function(){
var groupmember = this.getAttribute('groupmember');
var i = 0;
while(i <groupmember.length){
if(!groupmember[i].disabled)
groupmember[i].checked = this.checked;
i++;
} }
}
_setState(arrelement[i]);
}
i++;
}
}
var arrelement = document.all;
var i=0;
while(i <arrelement.length){
var forgroupattrib = arrelement[i].getAttribute('forcheckboxgroup');
if(forgroupattrib != null && forgroupattrib != ''){
arrelement[i].setAttribute('groupmember',_getGroupMember(arrelement[i]));
if(arrelement[i].tagName.toLowerCase() == 'input' && arrelement[i].type == 'checkbox'){
arrelement[i].onclick=function(){
var groupmember = this.getAttribute('groupmember');
var i = 0;
while(i <groupmember.length){
if(!groupmember[i].disabled)
groupmember[i].checked = this.checked;
i++;
} }
}
_setState(arrelement[i]);
}
i++;
}
}
a、b节点的勾选能跟随A的自由勾选更改状态,c一直为勾选
你得重新构建你的tree而且尽量使用自定义对象的方式来将几种状态明确的表述出来。把disable属性仅仅作为展示层的属性,不要给它有逻辑上的实际含义。
把while(i <inputs.length)改成while(i <inputs.length&&!inputs[i].disabled)后可以实现功能,
但是修改前的一个效果则失去了:修改前如果子节点c的默认为checked,disabled,父节点A的checkbox默认应该有一个部分子节点被选中的效果。但是现在修改后没有了,怎么才能功能和效果都达到。相关代码好像是下面这段:
if(master.tagName.toLowerCase() == 'input'&&master.type=='checkbox'){
if (chkselall) {
master.indeterminate = false;
master.checked = true;
}
if (chknosel) {
master.indeterminate = false;
master.checked = false;
}
if(!chkselall&&!chknosel)master.indeterminate = true;
}
else{
master.disabled = chknosel;
}