在 JavaScript 中,事件冒泡和捕獲是事件傳播的兩種機制。要控制這兩種機制,你可以使用以下方法:
使用 addEventListener
方法的第三個參數:
當使用 addEventListener
方法為元素添加事件監聽器時,可以傳遞一個可選的第三個參數。這個參數決定了事件觸發時,監聽器的執行順序。取值如下:
false
(默認值):事件觸發時,監聽器按照它們被添加的順序執行,即事件冒泡階段先執行捕獲階段的監聽器,然后執行目標元素上的監聽器,最后執行冒泡階段的監聽器。true
:事件觸發時,監聽器按照它們被添加的逆序執行,即事件冒泡階段先執行目標元素上的監聽器,然后執行捕獲階段的監聽器,最后執行冒泡階段的監聽器。示例:
const button = document.querySelector('button');
const parent = button.parentElement;
function bubbleHandler() {
console.log('Bubble handler');
}
function captureHandler() {
console.log('Capture handler');
}
parent.addEventListener('click', bubbleHandler, false); // 事件冒泡階段執行
parent.addEventListener('click', captureHandler, true); // 事件捕獲階段執行
使用 Event
對象的 stopPropagation
方法:
當事件觸發時,你可以使用 stopPropagation
方法阻止事件繼續傳播。這樣,事件就不會觸發冒泡或捕獲階段的監聽器。
示例:
const button = document.querySelector('button');
const parent = button.parentElement;
function bubbleHandler() {
console.log('Bubble handler');
}
function captureHandler() {
console.log('Capture handler');
}
parent.addEventListener('click', bubbleHandler);
parent.addEventListener('click', captureHandler);
button.addEventListener('click', (event) => {
event.stopPropagation(); // 阻止事件冒泡
});
通過合理地設置第三個參數和調用 stopPropagation
方法,你可以根據需要控制事件冒泡和捕獲的執行順序。