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中parseInt()和map()用法分析

    JS中parseInt()和map()用法分析 parseInt() parseInt()是一个全局函数,用于解析字符串并返回整数。该函数接受两个参数:要解析的字符串和一个表示解析进制的参数。 parseInt(string, radix) 其中,string是要转换的字符串,radix是一个可选参数,表示要解析的字符串的进制数。 如果省略radix参数,则…

    JavaScript 2023年5月28日
    00
  • js点击返回跳转到指定页面实现过程

    实现点击返回跳转到指定页面的过程,一般分为以下几步: 1.获取当前页面的浏览历史记录,即通过window对象的history属性获取。 2.将指定页面的相对路径或绝对路径存储到一个变量中。 3.使用JavaScript编写点击事件处理函数,在该函数中,修改浏览器的历史记录,使其返回到指定页面。通常使用history.pushState()方法实现此功能。该方…

    JavaScript 2023年6月11日
    00
  • 总结JavaScript三种数据存储方式之间的区别

    当我们开发基于 JavaScript 的应用程序时,我们需要考虑如何在应用程序中存储数据。JavaScript 中有很多种数据存储方式,本文将介绍三种最常用的数据存储方式,包括: Cookie Web 存储(LocalStorage 和 SessionStorage) IndexedDB Cookie Cookie 是最早的 Web 储存技术之一,可以通过 …

    JavaScript 2023年6月11日
    00
  • Ajax基础详解教程(一)

    关于《Ajax基础详解教程(一)》的完整攻略,下面就给大家讲解一下。 1. 简介 该篇教程主要介绍了 Ajax 的基础原理和用法。Ajax 的全称是 Asynchronous JavaScript and XML,即异步 JavaScript 和 XML,它可以随时向服务器请求数据而不用刷新整个页面,从而提高用户的交互体验。相信大家都知道Ajax往往用于实时…

    JavaScript 2023年6月11日
    00
  • Ajax异步请求技术实例讲解

    Ajax异步请求技术实例讲解 Ajax是一种在不重新加载网页的情况下,能够实现与服务器进行数据交互的技术,它可以帮助我们通过JavaScript向服务器发起异步请求,并在请求成功后执行一定的操作,例如更新页面内容等。 Ajax的基本使用方法 在JavaScript中使用Ajax,需要用到XMLHttpRequest对象,通过该对象来向服务器发起请求并获取响应…

    JavaScript 2023年6月11日
    00
  • 如何在JavaScript中等分数组的实现

    要在JavaScript中实现将一个数组等分成n个子数组的过程,可以按照以下步骤进行: 设置一个函数,用于等分数组 首先,我们需要设置一个函数,用于将原始数组等分成n个子数组。该函数可以设置两个参数,分别是原始数组和要分成的子数组的个数。 function splitArrayIntoChunks(array, chunks) { // 在此处添加代码 } …

    JavaScript 2023年5月27日
    00
  • JavaScript严格模式详解

    JavaScript严格模式详解 什么是JavaScript严格模式? JavaScript严格模式(Strict Mode),是一种更加安全和严谨的JavaScript编程模式。它主要的目的是消除Javascript语法的一些不合理、不严谨之处,减少与JavaScript引擎的冲突,并且对JavaScript中的一些不安全操作进行了限制。 当我们在开发中将…

    JavaScript 2023年6月10日
    00
  • js面向对象之静态方法和静态属性实例分析

    以下是“js面向对象之静态方法和静态属性实例分析”的完整攻略: 什么是静态方法和静态属性 在JavaScript中,静态方法和静态属性仅属于特定的类(构造函数),而不是属于类的实例。静态方法和静态属性的特点是在创建对象之前就已经存在,也就是说,它们可以不依赖对象而直接调用。 静态方法 静态方法是将函数绑定到一个类上,而不是将函数绑定到类的实例上。我们可以使用…

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