onchange 事件是否传播?

IT技术 javascript html dom
2021-01-18 10:55:12

我正在使用事件委托来侦听 DOM 中较低的事件,但它不适用于选择框上的 onchange 事件。onchange 事件是否会传播或冒泡 DOM?

谷歌搜索未能找到决定性的答案。

4个回答

根据规范changesubmitreset应该气泡和focusblur不应该泡沫。

此行为是正确实现在所有web浏览器除了IE <9,即,changesubmitreset做适当气泡在IE> = 9。

有关旧 IE 版本的 jQuery 解决方法,请参阅https://stackoverflow.com/a/4722246/227299

@mediafreakch 因为即使它令人困惑,它也有正确的信息。我已经更新了答案,使其更清晰并添加了参考
2021-03-15 10:55:12
冒泡更改事件仅在焦点移出/移入后触发。
2021-03-20 10:55:12
万一其他人一开始像我一样误读了这一点(显然@mediafreakch 也是如此):“更改”、“提交”和“重置”DO 气泡和“焦点”和“模糊”不要气泡——至少在规范中- 兼容的浏览器。
2021-03-23 10:55:12
我不明白这个答案的第一句话,如果它是真的,正如你所说,这种变化被规范为冒泡,并且它在大多数浏览器中得到了正确实现。这是一个错误吗?
2021-04-07 10:55:12
@Sergey,你能澄清一下你的答案吗?在第一句话中你说它没有泡沫,在第二句话中你说它确实......?为什么这个答案会得到这么多赞?
2021-04-09 10:55:12

在 jQuery 1.4+ 中,所有浏览器(包括 IE)中的更改事件都会冒泡。

$('div.field_container').change(function() {
   // code here runs in all browers, including IE.
});

我已经有一段时间没有处理这个问题了,但上次我这样做了,我记得 Firefox 识别了<SELECT>元素上的事件,而 IE6 只识别了<OPTION>标签上的事件就目前我所记得的。

那个时候IE7还没有出来。

因此,如果是这种情况,最好不要编写内联事件处理程序并将其应用于 DOM 就绪,以免您将拥有大量污染的、重复的代码。

没有 IE 有一个错误,因为它根本没有在 <option> 元素上注册事件(IE6、IE7、IE8),请参见此处的错误报告和测试页面:webbugtrack.blogspot.com/2007/11/...
2021-04-09 10:55:12

不确定我是否明白这个问题,但如果你是这个意思,那么不。

<div id="foo">
  <select onchange="alert('hi');">
    <option>Hello</option>
    <option>World</option>
  </select>
</foo>

div id="foo" 在哪里会有一个 onchange 事件...从选择列表中冒泡?


在相关说明中,仅供参考,您无法将事件附加到 IE 中选择列表中的选项(好吧,您可以,但不会触发)