看看: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++; 
     } 

解决方案 »

  1.   

    晕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++; 
         } 
      

  2.   

    我把html改改:<input type="checkbox" group="abc" disabled="disabled" checked>c <br>
    a、b节点的勾选能跟随A的自由勾选更改状态,c一直为勾选
      

  3.   

    一个很糟糕的消息。你的这个需求目前不可能实现。我解剖了一下你的程序,发现disabled属性目前标识的状态有4种不同的解释。按照目前你程序的结构无法将这四种状态描述出来。结果就是A节点是否能够被选中目前有很大的歧义建议你去弄一个对象来处理一下,我尝试了所有的捷径,结果是==============
    你得重新构建你的tree而且尽量使用自定义对象的方式来将几种状态明确的表述出来。把disable属性仅仅作为展示层的属性,不要给它有逻辑上的实际含义。
      

  4.   

    如果把while(i <groupmember.length)改成while(i <groupmember.length&&!groupmember[i].disabled)并且
    把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; 
             }
      

  5.   

    我说过了,因为disabled状态的多义性,使得目前你的代码根本无法实现你需要的功能,如果你想实现你的功能,你目前的东西就必须推倒重来,使用js对象来存储相关的含义,如果你不懂什么叫js对象的话,算我没说