addEventListener()中的第三个参数
昨天遇到⼀段js代码⾥⾯的addEventListener⽅法竟然有三个参数,去⾕歌搜了⼀下,觉得这个概念很有意思,值得总结⼀下写成博客。uCapture
addEventListener()中的第三个参数是Boolean类型的值,代表第⼆个参数handler是否在第⼀个参数Event的capture阶段使⽤。
事件(Event)在事件⽬标(EventTarget)中的顺序
当DOM元素之间有包含关系时,发⽣在其上的事件有两种顺序:
经济寿命
Capturing
Bubbling
Capturing就是从上往下:
| |
---------------| |-----------------
| element1 | | |
| -----------| |----------- |
| |element2 \ / | |
| ------------------------- |
| Event CAPTURING |
-----------------------------------
这种情况下,事件发⽣后,注册在element1上的handler会先触发,注册在element2上的handler会后触发。
Bubbling就是从下往上:
/ \
---------------| |-----------------
| element1 | | |嗷嗷待哺的读音
| -----------| |----------- |
| |element2 | | | |
| ------------------------- |
| Event BUBBLING |
-----------------------------------
这种情况下,事件发⽣后,注册在element2上的handler会先触发,注册在element1上的handler会后触发。
W3C标准中的事件顺序
| | / \
-----------------| |--| |-----------------
| element1 | | | | |
| -------------| |--| |----------- |
| |element2 \ / | | | |
| -------------------------------- |
03年属啥| W3C event model |
------------------------------------------
在w3c模型中,事件会先从上往下,到事件⽬标元素后,再从下往上,⼀直到最外⾯的元素。
塞多音字注音并组词代码实例
认为的英文<div id="parent">parent div红枣莲子粥
<div id="child">child div</div>
</div>
元宵节的作文400const parent = document.querySelector('#parent');
const child = document.querySelector('#child');
function first(){
alert('first');
}
function cond(){
alert('cond');
}
parent.addEventListener('click', cond,fal);
child.addEventListener('click', first);
点击child元素,会先弹出first,然后弹出cond。我们来分析⼀下为什么会这样:
三年级作文向日葵click事件在child元素发⽣后,第⼀步是capturing阶段,先从上往下寻找child元素的锚定元素(Ancestor Element)中是否有可以触发的handler,如果uCapture参数是true的话就会在此阶段触发,结果发现没有可以触发的handler。
click事件到达child元素后触发first⽅法,然后开始bubbling阶段,到达parent元素时发现有⽤于此阶段的handler,触发cond⽅法。如果我们把代码改⼀下,变成:
parent.addEventListener('click', cond,true);
child.addEventListener('click', first);
点击child元素,会先弹出cond,然后弹出first。分析过程和前⾯很类似:
click事件在child元素发⽣后,第⼀步是capturing阶段,先从上往下寻找child元素的锚定元素(Ancestor Element)中是否有可以触发的handler,发现可以触发cond。
click事件到达child元素后触发first⽅法,然后开始bubbling阶段,到达parent元素时发现有⽤于此阶段的handler,没有发现可以触发的handler。