在Firefox中,设置checkbox.disabled = false后,单击()不会立即运行

时间:2015-07-27 17:00:57

标签: javascript firefox checkbox onclick wicket

我正在为Apache Wicket页面编写一些Javascript,并且正在尝试创建一个" Select All"复选框,选中后,将检查所有其他复选框,然后禁用它们。同样,当dechecked时,它将启用和取消选中所有复选框。其余的复选框不会更新(也就是说,选中所有其他复选框不会选择全选框)。

我可以使用checkbox.checked = selectAll.checked来完成我想要的但是它似乎没有传递一个click事件,我在Wicket中需要一些功能。使用checkbox.click()为我提供了我需要的点击事件,但在重新启用复选框后似乎无法运行。



var selectAll = document.getElementById("all");

function checkbox_changed() {
  checkboxes = document.getElementsByName('foo');

  for (var i in checkboxes) {
    var checkbox = checkboxes[i];

    checkbox.disabled = false;

    if (checkbox.checked !== selectAll.checked) {
      //checkbox.checked = selectAll.checked;
      checkbox.click();
    }

    if (selectAll.checked) {
      checkbox.disabled = true;
    }
  }
}

<form>
  <input type="checkbox" id="all" onchange="checkbox_changed()">Select All
  <br>
  <br>
  <input type="checkbox" name="foo">One
  <br>
  <input type="checkbox" name="foo">Two
  <br>
  <input type="checkbox" name="foo">Three
  <br>
  <input type="checkbox" name="foo">Four
  <br>
</form>
&#13;
&#13;
&#13;

如果它更容易,这里是上面的jsfiddle:https://jsfiddle.net/ytggu5as/

编辑:我刚刚意识到这只发生在Firefox(我使用39.0)并更新了问题。在Chrome和Safari中似乎没什么问题(还没有对其他人进行过测试)。知道为什么会这样,以及如何解决这个问题?如果没有,除了使用.click()之外,是否有更好的替代.checked

1 个答案:

答案 0 :(得分:1)

在重新启用该复选框后调用click() 这一事实似乎不是bug in Firefox

您可以通过在第一次传递中设置disabled=false,然后在setTimeout(..., 0)内再次复选复选框并根据需要调用click()来解决此问题。