在 JavaScript 中,事件優(yōu)先級通常是根據(jù)事件監(jiān)聽器的類型和添加順序來確定的。以下是一些關(guān)于事件優(yōu)先級的規(guī)則:
onclick
、onmouseover
等屬性定義事件處理程序,那么這些處理程序的優(yōu)先級最高。<button onclick="alert('Inline handler')">Click me</button>
document.querySelector('a').addEventListener('click', function(event) {
event.preventDefault(); // 阻止默認行為
alert('Custom handler');
});
addEventListener
方法添加的事件監(jiān)聽器優(yōu)先級較低。如果有多個監(jiān)聽器,它們將按照添加的順序執(zhí)行。后添加的監(jiān)聽器會先執(zhí)行。document.querySelector('button').addEventListener('click', function() {
alert('Handler 1');
});
document.querySelector('button').addEventListener('click', function() {
alert('Handler 2'); // 這個監(jiān)聽器會先執(zhí)行,因為它是在另一個監(jiān)聽器之后添加的
});
addEventListener
的第三個參數(shù):從 Firefox 2 開始,可以使用 addEventListener
的第三個參數(shù)(useCapture
)來改變事件處理的順序。true
表示在捕獲階段執(zhí)行,false
表示在冒泡階段執(zhí)行。需要注意的是,這種方法并不會改變事件監(jiān)聽器的優(yōu)先級,只是改變了執(zhí)行順序。document.querySelector('button').addEventListener('click', function() {
alert('Handler 1'), false; // 在冒泡階段執(zhí)行
});
document.querySelector('button').addEventListener('click', function() {
alert('Handler 2'), true; // 在捕獲階段執(zhí)行
});
總之,事件優(yōu)先級主要取決于事件處理程序的類型和添加順序。內(nèi)聯(lián)事件處理程序和瀏覽器默認行為優(yōu)先級較高,而通過 addEventListener
添加的事件監(jiān)聽器優(yōu)先級較低。