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元素时,控制台输出顺序如下:

  1. inner
  2. 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元素时,控制台输出顺序如下:

  1. outer
  2. inner

因为inner元素和outer元素都指定了事件的捕获模式,所以inner的点击事件首先被outer元素捕获,然后再由inner元素触发。

总结来说,事件的传播有两种模式:捕获模式和冒泡模式,通过设置元素的addEventListener函数的第三个参数,可以指定事件的传播模式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中捕获与冒泡详解及实例 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS函数的定义与调用方法推荐

    我们来详细讲解一下“JS函数的定义与调用方法推荐”的完整攻略。 定义函数 定义一个函数可以用如下的语法: function functionName(parameter1, parameter2, … , parameterN) { // 函数体 } 其中 functionName 是函数名称,parameter1 到 parameterN 是函数的形参…

    JavaScript 2023年5月27日
    00
  • HTML5安全风险之Web Worker攻击详解

    HTML5安全风险之Web Worker攻击详解 什么是Web Worker? Web Worker是HTML5新增的一个功能,可以在后台线程中执行JavaScript脚本,而不会阻塞UI线程。Web Worker的主要应用场景是处理一些耗时的计算任务,如数据处理、图像处理等。 Web Worker的基本用法 在主线程中创建Web Worker对象: var…

    JavaScript 2023年5月28日
    00
  • 面向对象的Javascript之三(封装和信息隐藏)

    我会详细讲解“面向对象的Javascript之三(封装和信息隐藏)”的完整攻略。 面向对象的Javascript之三(封装和信息隐藏) 什么是封装? 封装是一种面向对象的编程思想,通过将数据和对数据的操作(即方法)封装在一个对象内部,以实现对对象的控制和保护。 封装可以分为两个方面: 将数据隐藏在对象内部,以避免外部对数据的不当操作。 将方法隐藏在对象内部,…

    JavaScript 2023年6月10日
    00
  • JavaScript常用基础知识强化学习

    JavaScript常用基础知识强化学习攻略 1. 前置知识 在进行JavaScript常用基础知识的强化学习之前,需要掌握以下前置知识: HTML和CSS基础知识 程序基本结构(语句、循环、条件判断等) 数据类型、变量、运算符 函数、对象、数组 2. 基础知识强化学习方法 2.1 阅读MDN文档 MDN提供了JavaScript的完整文档,包含了语言核心、…

    JavaScript 2023年6月10日
    00
  • 一文彻底搞懂Vue的MVVM响应式原理

    一文彻底搞懂Vue的MVVM响应式原理 了解Vue.js Vue.js 是一个渐进式JavaScript框架,它采用 MVVM(Model-View-ViewModel)模式进行构建。其中 ViewModel 是 Vue.js 主要的核心,Vue.js 的响应式也是建立在 ViewModel 上的。 Vue.js 的响应式原理 Vue.js 的响应式原理是基…

    JavaScript 2023年6月10日
    00
  • JavaScript 闭包机制详解及实例代码

    JavaScript 闭包机制详解及实例代码 什么是闭包 在JavaScript中,闭包(closure)是一种非常重要的概念。简单来说,闭包是指可以访问自由变量的函数。函数可以访问定义在它外部作用域内的变量。 闭包的基本形式 在一个函数内部,创建一个内部函数,内部函数可以访问外部函数的变量。这个内部函数就是闭包。 示例代码如下: function oute…

    JavaScript 2023年6月10日
    00
  • 深入浅析javascript函数中with

    深入浅析JavaScript函数中with的完整攻略 1. 理解with语句的作用 在JavaScript函数中,使用with语句可以将一个对象作为作用域,从而简化访问该对象的属性或者方法。可以理解为with语句是一种便利的方式,可以使得代码更加简洁。 with语句的语法如下: with(object){ //可以直接访问object中的属性或方法 } 2.…

    JavaScript 2023年5月27日
    00
  • 原生JS获取元素的位置与尺寸实现方法

    获取元素位置和尺寸信息是web开发中经常需要面对的问题。下面是一些原生JS获取元素位置和尺寸的方法。在示例中,我们将使用一个html文档和一个div元素作为示例。 获取元素位置 offsetTop和offsetLeft属性 在HTML文档中,每个元素都有offsetTop和offsetLeft属性,它们表示元素相对于其offsetParent(父元素)的顶部…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部