我正在为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;
如果它更容易,这里是上面的jsfiddle:https://jsfiddle.net/ytggu5as/
编辑:我刚刚意识到这只发生在Firefox(我使用39.0)并更新了问题。在Chrome和Safari中似乎没什么问题(还没有对其他人进行过测试)。知道为什么会这样,以及如何解决这个问题?如果没有,除了使用.click()
之外,是否有更好的替代.checked
?
答案 0 :(得分:1)
在重新启用该复选框后调用click()
这一事实似乎不是bug in Firefox。
您可以通过在第一次传递中设置disabled=false
,然后在setTimeout(..., 0)
内再次复选复选框并根据需要调用click()
来解决此问题。