这是重现问题的最简单的代码。 (在我的实际示例中,如果 ajax 调用出现错误,我将重置该复选框。)
<html>
<script src="http://code.jquery.com/jquery-1.4.2.js"></script>
<script>
$(document).ready( function(){
$('#ckbx').change( function( e ){
alert('fired.');
this.checked = !this.checked;
})
});
</script>
<form>
<input id="ckbx" type="checkbox"></input>
</form>
</html>
在 IE9 中,当我单击该复选框时,它会显示警报。然后,如果我等待任意时间,然后单击页面上的其他任何位置,它会再次触发该事件。
如果我删除 this.checked = !this.checked
问题就会消失。
谁能给我解释一下吗?或者提供一种方法来解决这个问题?
更新: 我正在使用 jquery 1.4.2;在 jquery 1.6 中这不是问题。然而,我们即将发布,并且我们不愿意更改 jquery 的版本。
最佳答案
这是因为当您重置复选框并单击页面上的其他位置时,.change()
事件会再次触发。您应该改用 .click()
事件。
<html>
<script src="http://code.jquery.com/jquery-1.4.2.js"></script>
<script>
$(document).ready( function(){
$('#ckbx').click( function( e ){
alert('fired.');
this.checked = !this.checked;
})
});
</script>
<form>
<input id="ckbx" type="checkbox"></input>
</form>
</html>
关于jquery - 当用户单击屏幕上的任意位置时,IE 会触发复选框的更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667294/