useCapture 是 addEventListener 的布尔型第三个参数,默认 false 表示冒泡阶段监听,设为 true 则在捕获阶段触发;需传布尔值 true 或 { capture: true },移除时须参数完全一致。

在 JavaScript 中,addEventListener 的第三个参数 useCapture 设为 true 即可开启事件捕获阶段监听。
什么是 useCapture 参数
useCapture 是一个布尔值,默认为 false(即事件处于冒泡阶段)。设为 true 时,事件监听器会在捕获阶段触发,也就是从最外层祖先元素向目标元素逐级向下传递时执行。
如何设置 useCapture 为 true
直接在调用 addEventListener 时传入 true:
element.addEventListener('click', handler, true);
- 第三个参数必须是布尔值,不能省略或传字符串(如
"true") - 现代写法也支持传入配置对象,此时用
{ capture: true } - 同一事件类型可在同一元素上同时绑定捕获和冒泡监听器,它们会按注册顺序分别在对应阶段执行
捕获阶段的实际表现
假设 HTML 结构为:<div id="outer"><div id="inner">点击我</div></div>,并绑定如下监听器:
立即学习“Java免费学习笔记(深入)”;
document.getElementById('outer').addEventListener('click', () => console.log('outer 捕获'), true);
document.getElementById('inner').addEventListener('click', () => console.log('inner 冒泡'), false);
点击 inner 元素时,输出顺序是:outer 捕获 → inner 冒泡,因为捕获先于目标阶段,而冒泡在目标之后发生。
常见用途和注意事项
- 常用于在父级提前拦截事件(如阻止表单内按钮的默认提交)
- 避免与冒泡监听器逻辑冲突,建议明确注释捕获意图
- 移除监听器时,
removeEventListener的参数必须完全一致(包括useCapture值) - 不是所有事件都支持捕获(例如
load、error等部分事件仅在冒泡阶段触发)


















