【发布时间】:2012-05-31 17:24:13
【问题描述】:
似乎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>");
});
});
这是预期的行为吗?
【问题讨论】:
-
预期?不。虽然老实说,我对早期版本的 IE 做了一些看起来如此荒谬的事情并不感到惊讶。
标签: javascript jquery