JavaScript 事件传播机制详解:捕获、目标与冒泡

作者:小圆点时间:2026-10-22 06:06:53浏览:235

本文详细解析 JavaScript 中事件的默认传播机制,涵盖捕获阶段、目标阶段和冒泡阶段三个核心过程。通过 HTML 嵌套元素示例与 addEventListener 第三个参数(useCapture)的代码演示,说明事件如何从外向内捕获、在目标节点处理以及从内向外冒泡,帮助开发者深入理解事件流并优化交互逻辑。

JavaScript 事件传播机制概述

在 JavaScript 中,事件发生时会遵循一套默认的传播机制,该机制决定了事件在 DOM 树中的传递路径。

第一阶段为捕获阶段(Capturing Phase)。事件从最外层的文档根节点开始,依次向内层查找并触发绑定了捕获阶段监听器的元素,直到到达目标节点的上层父元素。

第二阶段为目标阶段(Target Phase)。此时事件到达最初触发事件的元素,即当前事件源。在此阶段,会执行绑定在该目标元素上的事件处理程序,无论该监听器是注册在捕获阶段还是冒泡阶段。

第三阶段为冒泡阶段(Bubbling Phase)。事件从目标元素开始,由内向外依次向父级元素传递,触发各层父元素上绑定的冒泡阶段监听器。这是开发者日常开发中最常利用和遇到的阶段,因为大多数默认事件监听器都注册在冒泡阶段。

具体的传播路径与层级关系可参考下方的示意图,图中展示了嵌套元素间的事件流向。

JavaScript 事件传播机制概述


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #outer{
      margin:20px auto;
      padding:20px;
      width:300px;
      height:300px;
      background:#008000;
    }
    #inner{
      padding:20px;
      width:200px;
      height:200px;
      background:blue;
    }
    #center{
      padding:20px;
      width:100px;
      height:100px;
      background:yellow;
    }
  </style>
</head>
<body>
  <div id='outer'>
    <div id='inner'>
      <div id='center'></div>
    </div>
  </div>
  <script>
    var outer = document.getElementById('outer'),inner = document.getElementById('inner'),center = document.getElementById('center');
    //使用DOM0级事件绑定给元素的某一个行为绑定的方法,都是在行为触发后的冒泡阶段把方法执行的
    document.body.onclick = function(){
      console.log('body')
    }
    outer.onclick = function(){
      console.log('outer')
    }
    inner.onclick = function(){
      console.log('inner')
    }
    center.onclick = function(){
      console.log('center')
    }

    //addEventListener 第一个参数是行为的类型 第二个参数是给当前的行为定义的方法 第三个参数是控制在哪个阶段发生:true 在捕获阶段发生 false在冒泡阶段发生
    document.body.addEventListener('click',function(){
      console.log('body')
    },false)
    outer.addEventListener('click',function(){
      console.log('outer')
    },true)
    inner.addEventListener('click',function(){
      console.log('inner')
    },false)

    //输出 outer inner body
  </script>
</body>
</html>

以上内容完整介绍了 JavaScript 事件传播机制的核心概念与实例分析,旨在为读者提供清晰的参考。欢迎收藏与分享,以支持本站持续更新更多技术内容。

作者最新文章