jquery - 当用户单击屏幕上的任意位置时,IE 会触发复选框的更改事件

标签 jquery internet-explorer

这是重现问题的最简单的代码。 (在我的实际示例中,如果 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/

相关文章:

javascript - 将数据保存在可编辑的动态 html 表中

javascript - 带有 JSON.Stringify 的 ASP.NET Core 2.2 AntiForgeryToken

chrome 和 IE 的 css 问题

javascript - Jquery $ ('#someID > div' ).each(function(){..}) 在 IE 中不工作

css - Internet Explorer 加载 css 文件失败

javascript - 两个选定的输入具有相同的值

jquery - 使用 $(this) 与将选择器缓存到变量相比是否有任何性能优势?

javascript - 动画进度条文本显示

internet-explorer - Fiddler无法在Chrome中使用

javascript - 灯箱代码在 Chrome/Firefox 中工作正常但在 IE 中不工作