舉例
如果在 d3 上點選滑鼠,事件流是這樣的:
擷取階段 在 div1 處偵測是否有 useCapture 為 true 的事件處理程序,若有,則執行該程序,然後再同樣地處理 div2。
目標階段 在 div3 處,發現 div3 就是滑鼠點擊的節點,所以這裡為目標階段,若有事件處理程序,則執行該程序,這裡不論 useCapture 為 true 還是 false。
冒泡階段 在 div2 處偵測是否有 useCapture 為 false 的事件處理程序,若有,則執行該程序,然後再同樣地處理 div1。
addEventListener 有三個參數:第一個參數表示事件名稱(不含 on,如 "click");第二個參數表示要接收事件處理的函數;第三個參數為 useCapture,本文就講解它。
outDiv.addEventListener("click", function () { info.innerHTML = "outDiv" "
"; }, false);
middleDiv.addEventListener("click", function () { info. innerHTML = "middleDiv" "
"; }, false);
inDiv.addEventListener("click", function () { info.innerHTML = "inDiv" "
"; }, false);
上述是我們測試的程式碼,根據 info 的顯示來決定觸發的順序,有三個 addEventListener,而 useCapture 可選值為 true 和 false,所以 2*2*2,可以得出 8 段不同的程式。
•全為 false 時,觸發順序為:inDiv、middleDiv、outDiv;
•全為 true 時,觸發順序為:outDiv、middleDiv、inDiv;
•outDiv 為 true,其他為 false 時,觸發順序為:outDiv、inDiv、middleDiv;
•middleDiv 為 true,其他為 false 時,觸發順序為:middleDiv、inDiv、outDiv;
•……
最後得出以下結論:
•true 的觸發順序總是在 false 之前;
•如果多個均為 true,則外層的觸發先於內層;
•如果多個均為 false,則內層的觸發先於外層。