Javascript 变更事件内的检查值,即7-8与其他

Javascript 变更事件内的检查值,即7-8与其他,javascript,jquery,internet-explorer-8,Javascript,Jquery,Internet Explorer 8,有人知道为什么这段代码会在FF、Chrome和IE9中输出true,而在IE7-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

有人知道为什么这段代码会在FF、Chrome和IE9中输出true,而在IE7-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>


我还准备了一个。

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

在IE中,当更改事件触发时,尚未设置checked属性

一旦该事件竞争,但它已被设置和检查。将返回真

我不认为这是实现这一点的最佳方式,但要回答你的问题

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

这意味着,当代码执行此更改时,即使更改已经完成,也会设置checked属性,并看到“correct”/所需的行为

我在这里更新了你的小提琴


尝试将
e
替换为
event
只是为了好玩(我认为jQuery应该对其进行规范化)?以编程方式触发单击不会触发更改event@adeneo这是一个函数参数,调用什么并不重要。@KevinB-这是一个非常特定的参数,它是
事件
,在IE中,只需指定
事件
,它就可以工作,如果我没记错的话,你不需要
e
,同样的故事:)。工作起来会很疯狂。问题是在最后一行(触发
点击
事件的那一行)之后,
#value
元素的文本没有设置。你的意思是在该行运行之后?只有在处理完单击事件、触发更改事件,然后处理,然后发生超时后,才会设置该值。从视觉上看,这很快而且看不见,但是如果你在断点上,它就不会发生。视觉上是的,速度足够快,但如果我有一些依赖于该值的代码。。。
$("#cb1").on("change", function(e) {
    setTimeout(function() {
        $("#value").text(e.target.checked);
    }, 0);
});

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