JavaScript 中的事件传播机制主要包含三个阶段:捕获阶段、目标阶段和冒泡阶段。
基础概念:
相关优势:
类型:
addEventListener
方法,并将第三个参数设置为 true
来在捕获阶段处理事件。addEventListener
的第三个参数为 false
,即在冒泡阶段处理事件。应用场景:
遇到的问题及原因:
解决方法:
event.stopPropagation()
方法可以阻止事件的进一步传播(捕获或冒泡)。event.stopImmediatePropagation()
方法可以阻止当前元素上的其他事件监听器被调用。示例代码:
// HTML 结构
// <div id="parent">
// <button id="child">Click me</button>
// </div>
const parent = document.getElementById('parent');
const child = document.getElementById('child');
// 冒泡阶段处理
child.addEventListener('click', function(event) {
console.log('Child clicked - bubble');
});
parent.addEventListener('click', function(event) {
console.log('Parent clicked - bubble');
});
// 捕获阶段处理
child.addEventListener('click', function(event) {
console.log('Child clicked - capture');
}, true);
parent.addEventListener('click', function(event) {
console.log('Parent clicked - capture');
}, true);
在上述代码中,当点击按钮时,控制台输出顺序为:
Parent clicked - capture
Child clicked - capture
Child clicked - bubble
Parent clicked - bubble
这清晰地展示了事件在捕获阶段和冒泡阶段的传播顺序。
领取专属 10元无门槛券
手把手带您无忧上云