jQuery, Chrome和复选框.奇怪的行为



我浏览了整个网站,似乎找不到这个问题的答案。如果这个问题确实存在,请告诉我。

我目前正在尝试做一些基于树的复选框操作,我遇到了一些我觉得奇怪的行为。

在谷歌浏览器中,我发现选中一个复选框会留下一些"残留物",如果你愿意,这将不允许我使用"attrRemove('checked')勾选或取消勾选该复选框;"

有趣的是,Internet Explorer(9)有我想要的结果。请参阅此jsFiddle在Chrome和IE的效果很好的比较。

http://jsfiddle.net/xixionia/9K5ft/

有没有人可以解释这些差异,以及我如何能够在chrome中选中/取消选中已被"手工"选中的复选框?

<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
JavaScript

$(':checkbox').click(function(e) {
    if($(this).is(':checked')) {
        $(':checkbox').attr('checked', 'checked');
    } else {
        $(':checkbox').removeAttr('checked');
    }
});

提前感谢你的帮助。:)

编辑:

我能够找到这个工作。如果其他人有其他的解决方案,请告诉我,我会标记为解决方案。:)

$(':checkbox').click(function(e) {
    var value = this.checked;
    $(':checkbox').each(function(){ this.checked = value; });
});
编辑:

原来,这个问题是jQuery 1.6特有的。以前版本的jQuery没有这个问题。然而,我在这里发布了一个解决方案:设置"检查";jQuery的复选框?

当使用复选框(特别是基于复选框的复杂逻辑)时,我总是尽量避免在复选框上使用jQuery事件处理程序。jQuery中有一个bug,与点击复选框时触发事件的顺序和使用的浏览器有关:您可以在这里找到部分问题的描述。引用:

似乎当您触发复选框上的click事件时,默认行为(切换checked属性)在事件处理程序触发后发生。这与浏览器自然处理复选框单击事件时发生的情况相反——选中的属性被切换,然后执行事件处理程序。如果事件处理程序以某种方式依赖于复选框的状态(如果你在复选框上有一个点击处理程序,就意味着它可能依赖于复选框的状态),那么在固有的点击和jQuery的事件触发之间的操作顺序的差异可能会导致一个大问题。

jQuery称这是一个特性,因为它从一开始就存在,将其更改为正确的行为只会杀死许多现有的应用程序。我经常遇到复选框和"选中"的问题,只是因为事件触发得太晚了。所以我使用原生JS的方式:input。检查。

From: http://api.jquery.com/prop/你应该使用prop而不是attr

尽管如此,关于checked属性要记住的最重要的概念是它不对应于checked属性。该属性实际上对应于defaultChecked属性,应该仅用于设置复选框的初始值。选中的属性值不会随着复选框的状态而改变,而选中的属性会。

而不是:

$(':checkbox').removeAttr('checked');

你应该这样做:

$(':checkbox').attr('checked', false);

欢呼

我面临着同样的问题,并在chrome中使用以下代码解决。希望对你有帮助。

$("#allchkbox").click(function() {
    if(this.checked) {
        $(".ItemChkbox").each(function() {
            this.checked = true;
        });
    }
    else {
        $(".ItemChkbox").each(function() {
            this.checked = false;
        });
    }
});

最新更新