javascript - 复选框单击事件中的 event.stopPropagation 是否会阻止 IE8 及更早版本中触发更改事件?

标签 javascript jquery

在 IE9 之前的 IE 中,复选框 click 事件中的 event.stopPropagation() 似乎会阻止关联的 change 事件触发。

(以下代码位于jsFiddle中)

<input type="checkbox" value="Y" checked>Test
<div id="output">Logging...</div>

使用以下 jquery block ,更改事件在 IE8 及更早版本中不会触发,但在 IE9(和 Chrome)中触发:

$(document).ready(function() {

    $("input").click(function(event) {
        event.stopPropagation();
        $("#output").append("<pre>click</pre>");
    });

    $("input").change(function(event) {
        $("#output").append("<pre>change</pre>");
    });

});

Chrome 和 IE9 提供:

Logging...
change
click
change
click
change
click

而 IE8 及更早版本给出:

Logging...
click
click
click

但是,如果我进行特定的“IE9 之前”处理,那么一切都会按预期工作:

使用以下 jquery block :

$(document).ready(function() {

    $("input").click(function(event) {

        event.stopPropagation();

        $("#output").append("<pre>click</pre>");

        // fix event bubbling before IE9
        if ($.browser.msie) {
            if (parseInt($.browser.version, 10) < 9) {
                $(this).trigger("change");
            }
        }

    });

    $("input").change(function(event) {
        $("#output").append("<pre>change</pre>");
    });

});

这是预期的行为吗?

最佳答案

这是一个well-known IE8 bug这与事件冒泡无关:仅当焦点离开复选框时,更改事件才会在复选框上触发。

关于javascript - 复选框单击事件中的 event.stopPropagation 是否会阻止 IE8 及更早版本中触发更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688222/

相关文章:

javascript - 过滤我的@html.dropdownlist

javascript - 动态变量而不是 jquery 的方法

javascript - span 上 div 指定条件的倒计时

javascript - 是否有正确的方法来 $.extend jQuery 中的嵌套属性?

javascript - d3.js:路径在刻度之间与轴相交

javascript - 为什么鼠标滚轮在 chrome 中有效,但在 firefox 中无效

javascript - Ajaxify 链接,以便它仍然可以在单击时访问地址,但不会更改页面

javascript - 如何使用 Html/Javascript 使用 OData 服务?

php - TinyMCE/Tinybrowser 上传选项卡给出 404

javascript - 如何遍历DOM准备树结构数组