我正在使用这段jQuery向复选框添加单选按钮行为,即只允许检查每个组中的一个。
$("input:checkbox").click(function()
{
$("input:checkbox:checked[name='" + this.name + "']")
.not(this).removeAttr("checked");
});
它很好用,或者至少我这么认为,直到我发现在Opera中我仍然可以检查来自同一组的多个复选框,如果我坚持的话。通过快速切换一些复选框(点击像疯子)我最终得到两个(或更多)检查。
通常将JavaScript视为单线程我对此感到有些惊讶。但是,我知道JavaScript并不像看起来那样单线程(参见this answer),我认为这会导致这种行为。怎么会发生呢?
如果我的假设是正确的,任何人都可以解释会发生什么吗?在我给你链接的答案中可以阅读:
同样地,在提供它的元素上调用click()会立即在所有浏览器中调用onclick处理程序(至少这是一致的!)。
这似乎是相关的,除了这只发生在Opera(我尝试过使用IE(8),FF,Chrome和Safari)。
非常感谢任何输入!
答案 0 :(得分:1)
如果你真的很快点击这里, http://jsfiddle.net/RxbW6/1/
您会看到,当同时检查2个复选框时(通过发送垃圾邮件),第二个复选框不会触发click事件。因此,2点击事件干扰不是线程问题,而Opera似乎根本没有触发onclick事件。
我建议只使用一个广播组来设置风格,这种情况就是这里的。
然而,
$("input:checkbox").mouseup(function()
{
$("input:checkbox:checked[name='" + this.name + "']")
.not(this).removeAttr("checked");
});
将解决您的问题。 [编辑] mouseup可能会更好,所以你可以mousedown然后离开并保持之前的检查。