JavaScript中捕获与冒泡详解及实例

yizhihongxing

下面给出详细讲解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日

相关文章

  • 详解Javacript和AngularJS中的Promises

    详解Javascript和AngularJS中的Promises 什么是Promise Promise是一种解决异步编程的方法。在Javascript中,由于大量的异步操作(如网络请求、定时器等),往往会产生回调地狱(callback hell)的问题,而Promise可以很好地避免这种问题。 Promise中包含3种状态:pending、fulfilled…

    JavaScript 2023年5月28日
    00
  • 微信小程序wx.request的简单封装

    我可以为您提供“微信小程序wx.request的简单封装”的完整攻略。请注意,由于涉及到代码以及markdown格式,我将使用代码块展示相关示例。 1. 简介 在微信小程序中,通过 wx.request 可以发送网络请求。但使用 wx.request 还需要处理错误、重试等问题。因此,封装 wx.request 可以更方便地处理网络请求相关的问题。 2. 封…

    JavaScript 2023年5月27日
    00
  • 详细讲解JS节点知识

    详细讲解JS节点知识 在前端开发中,DOM节点操作是最为基础的操作之一,本篇攻略将会详细讲解JS节点的相关知识,包括DOM节点的获取、创建、删除和属性操作等。 DOM节点的获取 通过ID获取节点 如果想要通过ID获取对应的DOM节点,可以使用document.getElementById方法,如下所示: const node = document.getEl…

    JavaScript 2023年6月10日
    00
  • javascript求日期差的方法

    当我们需要计算两个日期之间的差值时,可以使用JavaScript中内置的方法来帮助我们进行计算。下面是一些常用函数的示例说明。 方法1:使用getTime()方法求日期差 使用new Date()创建两个日期对象 通过调用getTime()方法获取两个日期对象的时间戳 用两个时间戳相减得到日期差 示例代码如下: let date1 = new Date(‘2…

    JavaScript 2023年5月27日
    00
  • 全面解析JS字符串和正则表达式中的match、replace、exec等函数

    全面解析JS字符串和正则表达式中的match、replace、exec等函数 在JS中,字符串和正则表达式都有一些常用的函数,用于对它们进行操作。其中比较常用的包括match()、replace()和exec()函数。下面就分别来详细讲解它们的用法。 match()函数 match()函数用于在字符串中查找匹配正则表达式的内容,并返回一个包含匹配结果的数组或…

    JavaScript 2023年5月28日
    00
  • 使用JavaScript在html文档内添加新的元素节点

    使用JavaScript可以在html文档内添加新的元素节点,具体的步骤如下: 选中你想要添加元素的父节点 const parent = document.querySelector(‘#parent-id’); 这里假设你已经通过HTML的id属性找到了父节点,如果你不清楚可以查看querySelector的文档。 创建新节点 const newNode …

    JavaScript 2023年6月10日
    00
  • Flash & Ajax 操作 XML 实例:无刷新分页

    Flash & Ajax 操作 XML 实例:无刷新分页 介绍 Flash和Ajax都支持与服务器进行异步数据交换,做网站时常常会用到无刷新分页这个功能。本文将介绍在Flash和Ajax协作下实现无刷新分页的完整攻略。 步骤 1. 创建XML文件 首先创建一份XML文件,用于存储需要分页显示的数据。例如: <pages> <page…

    JavaScript 2023年6月11日
    00
  • js实现的动画导航菜单效果代码

    下面是“js实现的动画导航菜单效果代码”的完整攻略: 一、前置知识 在实现动画导航菜单效果之前,我们需要了解以下前置知识: HTML 和 CSS 基础知识,包括标签、布局、样式、选择器等; JavaScript 基础知识,包括变量、函数、事件、DOM 操作等; jQuery 熟练使用,包括选择器、动画、事件等。 二、实现步骤 下面是实现动画导航菜单效果的具体…

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