Javascript 变更事件内的检查值,即7-8与其他
有人知道为什么这段代码会在FF、Chrome和IE9中输出true,而在IE7-8中输出false吗?当然还有如何使其一致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
$("#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");