在Javascript捕获和气泡中执行所有事件
Do all events in Javascript capture and bubble?
我正在处理一个项目,在该项目中,我将一个eventListener绑定到play
事件的<audio>
元素,并将另一个event监听器绑定到同一事件的父元素。我注意到孩子的回调总是被调用的,但家长的回调从来没有被调用过。
如果我使用addEventListener()
的捕获模式,那么两个回调都被正常调用——首先调用父调用,然后调用子调用。
为了进一步调查,我写了一段代码,发现播放事件不会回到父级。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div><audio src="song.mp3" controls="true"></audio></div>
</body>
<script type="text/javascript">
parent = document.querySelector('div');
child = document.querySelector('div audio');
parent.addEventListener('click', function() {console.log('parent-click-capture');}, true);
parent.addEventListener('click', function() {console.log('parent-click-bubble');}, false);
parent.addEventListener('play', function() {console.log('parent-play-capture');}, true);
parent.addEventListener('play', function() {console.log('parent-play-bubble');}, false);
child.addEventListener('click', function() {console.log('child-click-capture');}, true);
child.addEventListener('click', function() {console.log('child-click-bubble');}, false);
child.addEventListener('play', function() {console.log('child-play-capture');}, true);
child.addEventListener('play', function() {console.log('child-play-bubble');}, false);
</script>
</html>
这就是输出:
父单击捕获
子点击捕获
子点击气泡
父级单击气泡
家长游戏捕获
儿童游戏捕捉
儿童游戏气泡
有人知道这种行为是否只是游戏事件的特殊行为,或者还有其他事件没有进入泡沫阶段(或捕捉阶段)吗?
所有JS事件都进入capture
阶段。
可以通过读取事件的bubbles
属性来检查事件是否进入bubble
阶段。
element.addEventListener('ACTION', (e) => console.log(e.bubbles))
相关文章:
- 使用react js在跨域上执行事件javascript
- 如何使用cURL或其他方式在点击时执行事件
- javascript执行事件顺序
- While Scrolling:如果scrollTop()等于或达到一个值,则执行事件
- 如何使用gulp-jslint-simple成功执行事件
- 如果初始事件返回 false,则停止执行事件侦听器
- 我怎么能等待在javascript中执行事件
- 使用 AJAX 在 jQuery 和 C# 之间传递变量和执行事件
- 执行 C# 事件处理程序,然后执行该 js 函数
- Vue.js 在组件渲染后执行事件触发器
- 在事件的自然行为之前执行事件
- javascript更改类没有't执行事件
- 如何按顺序执行事件函数
- 在worker上执行事件对象.Onmessage从不包含任何有趣的数据之外的东西
- 选项更改,执行事件javascript
- 使用node.js在进程终止时执行事件
- 从此特定父类查找兄弟类以执行事件
- 使用jquery创建弹出窗口并执行事件
- Javascript执行事件点击
- 单击除一个元素之外的所有内容时执行事件