龙空技术网

在DOM上绑定两个事件一个捕获,一个冒泡。先执行冒泡还是捕获?

小焱2018 299

前言:

此刻你们对“事件冒泡跟事件捕获谁先触发”大约比较重视,兄弟们都需要分析一些“事件冒泡跟事件捕获谁先触发”的相关文章。那么小编也在网摘上收集了一些对于“事件冒泡跟事件捕获谁先触发””的相关知识,希望咱们能喜欢,各位老铁们快快来了解一下吧!

冒泡是从下向上,DOM 元素绑定的事件被触发时,此时该元素为目标元素,目标元素执行后,它的祖先元素绑定的事件会向上顺序执行。

addEventListener 函数的第三个参数设置为 false,说明不为捕获事件,即为冒泡事件。

捕获则和冒泡相反,目标元素被触发后,会动目标元素的最顶层祖先元素往下执行到目标元素为止。

当一个元素绑定了两个事件,一个是冒泡,一个是捕获。

首先需要明确的是,绑定了几个事件就会执行几次。

对于执行顺序的问题需要注意一下。该 DOM 上的事件如果被触发,会有这几种情况。

如果该 DOM 是目标元素,则按事件绑定顺序执行,不区分冒泡/捕获如果该 DOM 是处于事件流中的非目标元素,则先执行捕获,后执行冒泡

因为 W3C 标准有说明,先发生捕获事件,后发生冒泡事件。所有事件的顺序是:其它元素捕获阶段事件-> 本元素代码书序事件 ->其它元素冒泡阶段事件

另外需要注意的是,在冒泡阶段,向上执行的过程中,已经执行过的捕获事件不再执行,只执行冒泡事件。

chrome,firefox都支持两种事件,捕获和冒泡,IE仅支持冒泡

具体看看效果

 <div id="btn">点击    <div id="btn2" style="margin: 100px;">      点击2    </div>  </div>  <script>    const btn = document.getElementById('btn')    const btn2 = document.getElementById('btn')    btn.addEventListener('click', () => {console.log('aa')})    btn.addEventListener('click', () => {console.log('bb')}, true)        btn2.addEventListener('click', () => {console.log('cc')})    btn2.addEventListener('click', () => {console.log('dd')}, true)  </script>

标签: #事件冒泡跟事件捕获谁先触发