美文网首页
红宝书第二十三讲:详解DOM事件模型:冒泡与事件委托

红宝书第二十三讲:详解DOM事件模型:冒泡与事件委托

作者: kovli | 来源:发表于2025-05-08 17:01 被阅读0次

红宝书第二十三讲:详解DOM事件模型:冒泡与事件委托

资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲


一、事件冒泡:从“子”到“父”的传递过程

当点击一个元素时,事件会从最深层元素逐级向上传递到根节点,即 事件冒泡[1][2]
类比:石头扔进水里,波纹从中心扩散到外围。

flowchart TD
    点击按钮 --> 按钮元素(div#child)
    按钮元素 --> 父元素(div#parent)
    父元素 --> body
    body --> html
    html --> document
代码验证:点击子元素触发父元素监听
<div id="parent">
  父元素
  <button id="child">子按钮</button>
</div>

<script>
  document.getElementById('parent').addEventListener('click', () => {
    console.log('父元素被触发了!'); // 点击按钮时会打印
  });
</script>

二、事件对象的关键属性

事件处理函数的参数 event 包含关键属性:

  • target → 实际触发事件的元素(如点击的按钮)[3]
  • currentTarget → 当前正在处理事件的元素(如父元素)[1]
  • stopPropagation() → 阻止事件继续冒泡[1]
parent.addEventListener('click', (e) => {
  console.log('实际触发者:', e.target.id); // 输出 'child'
  console.log('当前处理者:', e.currentTarget.id); // 输出 'parent'
  e.stopPropagation(); // 阻止冒泡到更高层
});

三、事件委托:用“父级代理”子级的事件

场景:列表中有多个子项需要点击处理。
传统方式 → 为每个子项绑定事件(性能差)[2]
事件委托 → 利用冒泡,只在父级绑定一个事件[2]

示例:点击任意列表项时打印内容
<ul id="list">
  <li data-action="go">去学习</li>
  <li data-action="eat">去吃饭</li>
  <li data-action="sleep">去睡觉</li>
</ul>

<script>
  document.getElementById('list').addEventListener('click', (e) => {
    const action = e.target.dataset.action;
    if (action) {
      console.log('执行操作:', action); // 点击任意li触发
    }
  });
</script>

优点:动态新增子项无需重新绑定事件,节省内存[2]


四、event.preventDefault() VS event.stopPropagation()

  • preventDefault()阻止默认行为(如点击链接不跳转)[1]
  • stopPropagation()阻止冒泡(父元素不再触发)[1]
document.querySelector('a').addEventListener('click', (e) => {
  e.preventDefault(); // 阻止跳转
  e.stopPropagation(); // 防止父元素的事件被触发
});

目录:总目录
上篇文章:红宝书第二十二讲:详解JavaScript类型化数组与二进制数据处理


脚注


  1. 《JavaScript高级程序设计(第5版)》中的事件对象属性表解释了bubblesstopPropagation()

  2. 《JavaScript高级程序设计(第5版)》通过父元素代理处理多个子项事件示例说明事件委托

  3. 《JavaScript高级程序设计(第5版)》代码显示通过event.target区分事件源

相关文章

  • JavaScript Events事件汇总

    事件参数、事件捕获冒泡 事件委托 事件默认行为 DOM 1 、DOM 2、DOM 3模型 实现遮罩功能(点击穿透、...

  • 什么是DOM的事件委托

    DOM的事件委托(Event delegation)是通过事件 ”冒泡“ (event propagation) ...

  • DOM的事件模型和DOM事件流

    DOM的事件模型 DOM事件模型包括捕获和冒泡(ie用的是事件冒泡),捕获是从上往下到达目标元素,冒泡是从当前元素...

  • 前端面试题(3)——DOM事件类

    基本概念:DOM事件的级别 DOM事件模型:事件冒泡事件捕获 DOM事件流 描述DOM事件捕获的具体流程 Even...

  • Dom事件

    Dom事件的级别Dom事件模型(冒泡+捕获)Dom事件流 http://www.cnblogs.com/staro...

  • js事件委托(事件代理)

    定义:事件委托就是在DOM事件的冒泡阶段,把具体dom上发生的事件委托给父元素或祖先元素去处理。原理:要了解委托的...

  • 2022-01-09 浏览器相关面试知识点

    一.详解浏览器事件捕获与冒泡 1. 事件委托/事件代理 捕获阶段-->目标阶段-->冒泡阶段 第三个参数为true...

  • 3-6 DOM事件

    问题 DOM 事件的级别 DOM 事件模型(就是捕获和冒泡儿) DOM 事件流 描述DOM事件捕获的具体流程 Ev...

  • DOM事件模型与事件委托

    1.DOM事件模型 DOM支持两种事件模型: 捕获型模型 冒泡型模型 先看下面的代码 给三个div分别添加事件监听...

  • 前端面试准备--3.DOM事件

    DOM事件 1.基本概念:DOM事件的级别 2.DOM事件模型(冒泡捕获) 3.DOM事件流(页面中接受事件的顺序...

网友评论

      本文标题:红宝书第二十三讲:详解DOM事件模型:冒泡与事件委托

      本文链接:https://www.haomeiwen.com/subject/xiteijtx.html