0

我已经阅读了许多关于选择所有复选框的其他问题,但找不到一个说明如何触发其他复选框操作的问题。

I have a main checkbox, when this checkbox is selected all other checkboxes are selected as well. 问题是,其他复选框必须执行自己的操作,例如禁用文本字段等,如果它们被选中/未选中。我通过将 onclick 添加到每个复选框来实现这一点。那么,如果选择了主复选框,如何在单击时调用每个复选框(或使每个复选框执行其操作)?

在阅读了这个之后,我做了以下几点:

      // main checkbox functin that checks/unchecks other checkboxes. 

  function toggleAllCheckBoxes(source , operationType) {
                checkboxes = document.getElementsByName("checkBox" + operationType);
                for each(var checkbox in checkboxes)
                checkbox.checked = source.checked;
               // checkbox.addEventListener('click', true); // this is wrong.
            }


  //this will toggle text fields enabled/disabled
 function toggleDisable(oldTable, newTable , checkBox)
    {
        if( document.getElementById(newTable) !=null)// in case to toggle only old table
        {
            document.getElementById(newTable).disabled = checkBox.checked;
        }

        document.getElementById(oldTable).disabled = checkBox.checked;
    }

主复选框:

All<input type="checkbox" onClick="toggleAllCheckBoxes(this , '<?=$operationType?>')"/> 

其他复选框

  X<input name="checkbox" id="checkbox" onclick="toggleDisable('<?= $originalTableId?>' , '<?= $backupTableId?>' , this )" type="checkbox" /> 

到目前为止,这工作正常,除了如果选中主复选框,则不会启用/禁用文本字段。尽管单个复选框能够做到这一点。

谢谢。

4

1 回答 1

1

我看到两个问题:

  1. JavaScript中没有for each运算符。您需要在此处使用普通的 for 循环。
  2. 您不想checked为复选框设置属性,因为如您所见,这将绕过所有事件处理程序。相反,调用click()复选框,它将被选中(或取消选中)并且所有事件处理程序都将被调用。

最终看起来像这样toggleAllCheckBoxes

for(var i = 0; i < checkboxes.length; i++)
    checkboxes[i].click();

这是一个尝试此代码的小提琴:http: //jsfiddle.net/z4Ltc/

于 2012-11-20T13:49:18.910 回答