下面给出详细讲解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中捕获与冒泡详解及实例
基础教程推荐
- 基于html css实现带搜索图标的搜索框功能 2023-12-20
- 分享一个自己写的简单的javascript分页组件 2023-12-01
- 第5天:head区的其他设置 2022-11-04
- vite2.0+vue3+ts前端最新热门技术项目搭建 2023-10-08
- AJAX请求数据及实现跨域的三种方法详解 2023-02-24
- md转html(linux) 2023-10-25
- Typescript + Vue + Eslint使用不报错的方法总结。 2023-10-08
- Vue-vue-router(二)嵌套路由 2023-10-08
- 重新认识表格和一个访问无障碍的数据表格例子 2022-10-16
- js报错:Uncaught SyntaxError: Unexpected string 2023-07-09