下面给出详细讲解JavaScript中捕获与冒泡的攻略。
下面给出详细讲解JavaScript中捕获与冒泡的攻略。
什么是事件冒泡和捕获
事件冒泡和捕获是JS中处理事件的两种机制。
当一个元素上发生了事件时,如果该元素定义了事件处理函数,那么这个事件会先按照捕获的顺序从父元素一直传递到子元素,再由子元素向上冒泡直到父元素。
事件冒泡
当一个元素上发生事件时,它会把这个事件交给它的父元素处理,父元素再把这个事件交给自己的父元素,一直到整个文档的根节点(window对象)。
事件冒泡是从子元素往父元素冒泡。
事件捕获
与事件冒泡相反的是,事件捕获从顶层节点把事件逐级传递到某一个节点,然后再转向目标节点,最后到达事件目标。
事件捕获是从父元素向子元素传递事件。
两者区别
事件处理程序先经历捕获过程,然后才到目标元素,最后才是冒泡过程,这种过程也被称为事件的传播。
区别就在于传播的顺序不同:事件捕获的顺序是从上到下,而事件冒泡是从下到上。
代码示例
下面为一个捕获和冒泡事件的代码示例:
<div id="outer">
<div id="inner"></div>
</div>
document.getElementById('inner').addEventListener('click', function () {
console.log('inner');
}, false); // 冒泡模式
document.getElementById('outer').addEventListener('click', function () {
console.log('outer');
});
点击inner元素时,控制台输出顺序如下:
- inner
- outer
因为inner元素只指定了事件的冒泡模式,所以inner的点击事件冒泡到outer元素上再由outer元素触发。
下面我们将代码改为使用事件捕获模式:
document.getElementById('inner').addEventListener('click', function () {
console.log('inner');
}, true); // 捕获模式
document.getElementById('outer').addEventListener('click', function () {
console.log('outer');
}, true); // 捕获模式
点击inner元素时,控制台输出顺序如下:
- outer
- inner
因为inner元素和outer元素都指定了事件的捕获模式,所以inner的点击事件首先被outer元素捕获,然后再由inner元素触发。
总结来说,事件的传播有两种模式:捕获模式和冒泡模式,通过设置元素的addEventListener函数的第三个参数,可以指定事件的传播模式。
本文标题为:JavaScript中捕获与冒泡详解及实例


基础教程推荐
- Vue Router 的路由配置 动态路由和懒加载 2023-10-08
- 完美解决ajax跨域请求下parsererror的错误 2023-01-26
- Ajax提交Form表单页面仍会刷新问题的快速解决办法 2023-01-26
- vue实现tab选项卡 2023-10-08
- 关于JavaScript命名空间的一些心得 2023-11-30
- Linux 服务器 安装raml2html 管理API文档 raml 2023-10-25
- 使用JavaScript实现简单图像放大镜效果 2022-08-30
- [使用Vue中的devServer.proxy代理跨域请求时的坑及奇妙的解决方法] POST 请求被转为了 GET 请求,并且传入的参数也被清除了。但是使用Postman测试接口时完全正常 2023-10-08
- vuecli2.9.6卸载不掉,解决方案 2023-10-08
- 5个HTML5的常用本地存储方式详解与介绍 2022-11-16