复选框event.stopPropagation()
事件中的click
似乎会阻止相关的change
事件在IE9之前在IE中触发。
(以下代码位于jsFiddle)
<input type="checkbox" value="Y" checked>Test
<div id="output">Logging...</div>
使用以下jquery块,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块:
$(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>");
});
});
这是预期的行为吗?
答案 0 :(得分:3)
这是一个与事件冒泡无关的well-known IE8 bug:当焦点离开时,更改事件仅在复选框上触发。
答案 1 :(得分:1)
(编写有关Tgr答案的评论,以便我接受答案。)
如果从click事件中删除了“event.stopPropagation()”行,则会在IE8中按预期触发更改事件,因此这不是众所周知的IE8错误mentioned by Tgr。
@Tgr确认:
jQuery尝试规范化大多数浏览器怪癖,包括这个:它在点击时模拟更改事件并吃掉在模糊时触发的事件(参见
jQuery.event.special.change
)。stopPropagation
可能会干扰这一点。