在Firefox中,click()设置后不运行复选框.Disabled = false
In Firefox, click() does not run right after setting checkbox.disabled = false
我正在为Apache Wicket页面编写一些Javascript,并试图创建一个"Select All"复选框,当选中时,将检查所有其他复选框,然后禁用它们。类似地,当取消选中时,它将启用和取消选中所有复选框。这个复选框将不会被其他复选框更新(也就是说,选中所有其他复选框将不会选中select all框)。
我可以用复选框完成我想要的。checked = selectAll。检查,但它似乎没有传递一个点击事件,我需要在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>
为了方便起见,下面是上面的示例:https://jsfiddle.net/ytggu5as/
编辑:我刚刚意识到这只发生在Firefox(我使用39.0)和更新的问题。它似乎在Chrome和Safari(没有测试过任何其他)。知道为什么会发生这种情况吗?知道如何解决吗?如果没有,是否有比.checked
更好的替代.click()
?
在之后调用click()
重新启用复选框不起作用的事实似乎是Firefox的一个错误。
您可以通过在第一次传递中设置disabled=false
来解决这个错误,然后在setTimeout(..., 0)
中再次遍历复选框并根据需要调用click()
。
相关文章:
- 嗨,我正试图将我的movieprice数组从复选框值传递给另一个计算选择总数的函数,但我的代码没有;t运行
- 为预先选中的复选框在加载时运行ng更改函数
- C#/ASP-web,ASP:在客户端执行复选框消息框,如果是,则运行服务器端代码
- 根据复选框运行函数
- 我的 javascript 语句不会运行其 else 语句,即使未选中复选框
- 在运行时添加复选框并将其保存在 HTML 文件代码中
- 如果选中复选框,则在登录后运行 javascript 函数
- 在单击禁用复选框时运行函数
- 在更改的众多复选框之一上运行javascript函数
- 动态复选框创建以在单击时运行函数
- 勾选复选框并通过单击链接运行 onclick 事件
- 如果选中了特定的复选框,我想运行另一段 jQuery 代码(如果是)
- 在实际设置checked标志之前,运行脚本onclick的复选框
- 将父样式更改应用于组中的所有复选框;全部检查”;运行javascript函数
- 路由加载时运行成员控制器函数以设置控制复选框的属性
- 在我的页面上更改复选框后运行函数
- 单击自定义复选框不会运行关联的onClick功能
- 如何在JavaScript/jQuery中弹出模态并运行复选框检查
- 复选框-仅在选中jquery时运行
- 在Firefox中,click()设置后不运行复选框.Disabled = false