51. 事件委托的本质与优势场景 副本.md 来源:https://my.feishu.cn/file/Qwnob75zOoGkHvxewuIcm4t2nnd 采集状态:已完成正文采集;原文件源码视图逐行采集,行号 1 至 63 连续,滚动到底。 ## 1. 核心概念 (Core Concept) 事件委托(Event Delegation)是一种利用事件冒泡机制的技巧。它并非直接在每个子元素上绑定事件监听器,而是将事件监听器绑定在父级元素上。当子元素上的事件发生时,由于事件冒泡,该事件会“冒泡”到父级元素,由父级元素的监听器捕获并处理。在父级监听器中,可以通过事件对象的 `target` 属性来确定实际触发事件的是哪个子元素。 ## 2. 为什么需要它? (The "Why") 事件委托主要解决以下几个关键问题: * **减少内存开销:** 无需为大量子元素分别绑定事件监听器,只需在父级元素上绑定一个,大大减少了内存占用。这对于包含大量相似子元素的列表或表格尤其有效。 * **动态添加元素的事件处理:** 对于通过 JavaScript 动态添加到页面中的元素,无需在元素创建后手动为其添加事件监听器。只要这些新元素位于已绑定了事件委托的父元素下,它们的事件就能自动被委托处理。 * **简化代码结构:** 将事件处理逻辑集中在一处,使得代码更加简洁、易于维护。 ## 3. API 与用法 (API & Usage) 事件委托的核心是利用事件冒泡机制和事件对象的 `target` 属性。 主要 API: * `element.addEventListener(type, listener, useCapture)`: 在父元素上绑定事件监听器。`useCapture` 参数通常为 `false`,表示在冒泡阶段处理事件。 * `event.target`: 事件对象的属性,指向触发事件的原始元素(即用户实际点击或交互的那个元素)。 **经典代码示例 (来自 MDN Web Docs 示例启发):** 假设有一个无序列表 `