1

有谁知道为什么这段代码会在 FF、Chrome 和 IE9 中打印出 true 而在 IE 7-8 中打印出 false ?当然还有如何使它保持一致。

$("#cb1").on("change", function(e) {
    $("#value").text(e.target.checked);
});

$("#cb1").trigger("click");

HTML是

<input type="checkbox" id="cb1" />
<div id="value"></div>

我还准备了一个jsfiddle

4

1 回答 1

0

它在 IE 中返回 false 的原因是由于事件的时间/顺序。

在 IE 中触发 change 事件时,还没有设置 checked 属性。

一旦该事件竞争,然而它已经被设置并且 .checked 将返回 true。

我不相信这是实现这一点的最佳方法,但要回答你的问题......

根据您现有的代码包装实际设置, setTimeout 调用中的文本将延迟其执行。

这意味着当代码执行此更改时,即使已经完成,也将设置选中的属性,并且将看到“正确”/所需的行为。

我在这里更新了你的小提琴http://jsfiddle.net/WkGUr/16/

$("#cb1").on("change", function(e) {
    setTimeout(function() {
        $("#value").text(e.target.checked);
    }, 0);
});

$("#cb1").trigger("click");
于 2012-12-11T23:57:50.003 回答