【发布时间】:2012-10-26 21:36:18
【问题描述】:
我刚刚了解到,在 JS 中我们有两种事件类型:Capture 和 Bubble。气泡可用于避免将eventListener 附加到所有孩子的需要;而是仅将侦听器附加到父级并让它检查目标。听起来很酷。我尝试了这个例子:
<div id="parent-list">
<span>span1</span>
<span class='target'>span2</span>
<span>span3</span>
<span>span4</span>
</div>
<script type="text/javascript">
document.getElementById('parent-list').addEventListener('click',function(e){
if( e.target && e.target.nodeName=='SPAN' ){
var classes = e.target.className.split(' ');
for(var i=0; i<classes.length; ++i){
if( classes[i]=='target' ){
alert('Bingo! you hit the target.');
}
}
}
});
</script>
但我没有将任何侦听器附加到子跨度。然而,他们身上的事件正在冒泡!那么在JS中冒泡默认事件顺序?那么在哪种情况下会使用捕获(自上而下)?
【问题讨论】:
-
不是直接重复,但应该回答您关于事件传播顺序的问题。
-
@FabricioMatte 我的问题是关于默认事件排序;不是他们。我在那篇文章中找不到类似的东西。如果我错了,请纠正我。
-
冒泡(从最里面到最外面)是所有现代浏览器的默认设置,并且被 jQuery 使用。捕获(从最外到最内)不像跨浏览器,而且大多是旧的 IE 专有 AFAIK。
-
@FabrícioMatté 捕获实际上 不 被 ghettoIE根本 支持,而 W3C 要求与两者兼容。 ghettoIE 做对了其中之一,以及基于边框的 CSS 框大小调整,而不是仅内容。
-
@Norguard 是的,你是对的。我不得不重新阅读一些关于默认事件传播顺序的文章。
=]
标签: javascript dom-events event-bubbling