← 全部文章

技术与生活 / 一篇记录

列表后来才生成,点击事件也能接住

把监听器放在稳定父节点上,可以处理后来加入的子元素。

事件会沿 DOM 路径传播,稳定的父节点可以统一判断哪个子元素触发操作。这样新增列表项后不必为每个元素重新注册同一套处理器。

从一个例子看起

以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。

document.addEventListener('click', e => { if (!(e.target instanceof Element)) return; const a = e.target.closest('a'); if (a) console.log(a.pathname); });

新增链接后点击,检查父层监听器仍能处理。

排查时再往前走一步

点击链接文字、图标和空白区域分别测试目标解析。还要检查 stopPropagation、嵌套组件和 Shadow DOM 是否改变了预期传播路径。

委托处理器还需要确认找到的链接确实属于目标组件。多个列表共用页面时,范围过大的 document 监听可能收集到不相关操作,稳定父容器往往是更合适的边界。

事件目标不总是期望的元素类型,使用 closest 前应先检查目标是否为 Element。

参考:JavaScript 文档。

搜索文章

输入关键词,找回一篇记录。