Javascript 事件捕获阶段在不';没有子节点 让我们考虑下面的HTML <div id='outer'> Outer Tag <div id='inner'>Inner Tag</div> </div>

Javascript 事件捕获阶段在不';没有子节点 让我们考虑下面的HTML <div id='outer'> Outer Tag <div id='inner'>Inner Tag</div> </div>,javascript,event-handling,dom-events,event-bubbling,event-capturing,Javascript,Event Handling,Dom Events,Event Bubbling,Event Capturing,现在,我们已经应用了事件,当我们点击internalelement时,输出应该如下所示 外线被俘 内部点击 外部点击 但若我们从上面的html中删除了内部span,那个么捕获阶段似乎是在冒泡阶段之后启动的,如下所示 外部点击 外线被俘 有人能解释为什么会发生这种情况吗?在目标元素上,冒泡和捕获之间没有区别-事件在事件中。所有在它上面注册的事件处理程序都将被激发,并且它们将按照安装顺序被激发。您在不同的浏览器中尝试过这个吗?另外,您是否尝试过在内部元素出现时单击外部元素以查看发生了什么事?@Pet

现在,我们已经应用了事件,当我们点击
internalelement
时,输出应该如下所示

外线被俘
内部点击
外部点击

但若我们从上面的html中删除了
内部span
,那个么捕获阶段似乎是在冒泡阶段之后启动的,如下所示

外部点击
外线被俘


有人能解释为什么会发生这种情况吗?

在目标元素上,冒泡和捕获之间没有区别-事件在事件中。所有在它上面注册的事件处理程序都将被激发,并且它们将按照安装顺序被激发。

您在不同的浏览器中尝试过这个吗?另外,您是否尝试过在内部元素出现时单击外部元素以查看发生了什么事?@PetarVasilev是的,我也欺骗了它,它基本上是通过单个DOM元素实现的。@PetarVasilev我已经在Chrome、Firefox、IE最新版本上测试过了谢谢@贝吉:)
var outer = document.getElementById('outer'),
    inner = document.getElementById('inner');

outer.addEventListener('click',function(){
   console.log('Outer Clicked!')
}, false);

outer.addEventListener('click',function(){
   console.log('Outer Captured!')
}, true); // event capture flag set to true

inner.addEventListener('click',function(){
   console.log('Inner Clicked!')
}, false);