JavaScript 事件冒泡和事件捕获

JavaScript 事件冒泡和事件捕获是两种处理 DOM 事件机制的方式,它们的区别在哪里呢?本文将会从以下几个方面进行详细阐述:

一、事件冒泡和事件捕获的简介

事件冒泡和事件捕获是 DOM 事件机制中触发事件后处理过程中两种不同的捕获方式。

在事件冒泡(bubbling)模式中,事件首先在触发元素上被捕获,然后沿着 DOM 树向上传递,直到到达文档的根节点。在此过程中,会触发所有的父元素的相应事件处理函数。

而在事件捕获(capturing)模式中,事件首先被捕获到文档的根节点,然后从根节点沿着 DOM 树一层层向下传递,直到到达触发元素。在此过程中,会触发所有的父元素的相应事件处理函数。

二、事件冒泡和事件捕获的区别

1、触发顺序不同

在事件冒泡模式中,事件处理的顺序是从触发元素开始,由内向外逐步冒泡,最终到达 document 元素。

而在事件捕获模式中,事件处理的顺序是从 document 元素开始,由外向内逐步捕获,最终到达触发元素。

2、事件处理的方式不同

在事件冒泡模式中,事件的处理方式是先从子节点开始,再向父节点传递。也就是说,先触发节点自己的事件处理函数,再依次触发父元素的事件处理函数。

而在事件捕获模式中,事件的处理方式是先从父节点开始,再向子节点传递。也就是说,先触发 document 的事件处理函数,然后依次触发子节点的事件处理函数。

3、默认事件优先级不同

默认情况下,事件冒泡和事件捕获模式都会触发默认的事件处理函数。但是,在事件冒泡模式中默认的事件处理函数会在所有的父节点处理完之后再触发,而在事件捕获模式中默认的事件处理函数则会在到达目标元素之前被触发。

三、代码示例

1、事件冒泡模式的代码示例

  
    <div id="grandparent">
      <div id="parent">
        <button id="button">点击我</button>
      </div>
    </div>

    <script>
      const grandparent = document.querySelector('#grandparent');
      const parent = document.querySelector('#parent');
      const button = document.querySelector('#button');

      grandparent.addEventListener('click', function() {
        console.log('触发 grandparent 的点击事件处理函数');
      }, false);

      parent.addEventListener('click', function() {
        console.log('触发 parent 的点击事件处理函数');
      }, false);

      button.addEventListener('click', function() {
        console.log('触发 button 的点击事件处理函数');
      }, false);
    </script>
  

在上面的代码中,当我们点击 button 按钮时,输出的结果是:

  
  触发 button 的点击事件处理函数
  触发 parent 的点击事件处理函数
  触发 grandparent 的点击事件处理函数
  

由此可见,事件处理是从子节点开始,依次向上父节点冒泡传递。

2、事件捕获模式的代码示例

  
    <div id="grandparent">
      <div id="parent">
        <button id="button">点击我</button>
      </div>
    </div>

    <script>
      const grandparent = document.querySelector('#grandparent');
      const parent = document.querySelector('#parent');
      const button = document.querySelector('#button');

      grandparent.addEventListener('click', function () {
        console.log('触发 grandparent 的点击事件处理函数');
      }, true);

      parent.addEventListener('click', function () {
        console.log('触发 parent 的点击事件处理函数');
      }, true);

      button.addEventListener('click', function () {
        console.log('触发 button 的点击事件处理函数');
      }, true);
    </script>
  

在上面的代码中,当我们点击 button 按钮时,输出的结果是:

  
  触发 grandparent 的点击事件处理函数
  触发 parent 的点击事件处理函数
  触发 button 的点击事件处理函数
  

由此可见,事件处理是从 document 节点开始,依次向下子节点传递。

四、总结

事件冒泡和事件捕获是 JavaScript 中用于处理 DOM 事件机制的两种不同的方式。区别在于事件的触发顺序、事件的处理方式以及默认事件的触发时机等。在实际开发中,可以根据具体需求选择使用合适的方式。

原创文章,作者:LAPFR,如若转载,请注明出处:https://www.506064.com/n/370929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LAPFRLAPFR
上一篇 2025-04-23 00:48
下一篇 2025-04-23 00:48

相关推荐

  • 抖音外放亲妈下葬事件的背后真相

    近期,一段抖音外放亲妈下葬的视频引发广泛关注和热议。不少人对这个事件感到震惊和愤怒,认为这种行为非常不尊重亲人,触犯了社会公德和家庭道德。但是,事情真相到底是什么呢?我们有必要从多…

    编程 2025-04-28
  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • cc.director.on事件监听器

    本文将从多个方面详细介绍Cocos Creator中的cc.director.on事件监听器。 一、cc.director.on的作用和用法 cc.director.on是Coco…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • CloneDeep函数在Javascript开发中的应用

    一、CloneDeep的概念 CloneDeep函数在Javascript中是一种深层克隆对象的方法,可以在拷贝对象时避免出现引用关系。使用者可以在函数中设置可选参数使其满足多种拷…

    编程 2025-04-25
  • JavaScript保留整数的完整指南

    JavaScript是一种通用脚本语言,非常适合Web应用程序开发。在处理数字时,JavaScript可以处理整数和浮点数。在本文中,我们将重点关注JavaScript如何保留整数…

    编程 2025-04-25
  • JavaScript点击事件全方位指南

    一、click事件基础 click事件是最常用的鼠标事件之一,当元素被单击时触发。click事件适用于大多数HTML元素(<a>、<button>)和SVG…

    编程 2025-04-25
  • 探究keyup和keydown事件

    一、介绍 在前端开发中,代码执行通常与用户操作有关。用户操作中,常用的是键盘事件,其中keydown和keyup事件是最为常见的两种。这两种事件都可以用来监测用户按键,但它们有不同…

    编程 2025-04-25

发表回复

登录后才能评论