
事件(Event)和監聽
|
25
Netscape 4 採用的做法,稱為事件
捕捉
(
capturing
),這種做法會先透過觸發事件的網
頁元件,找出它最上層的元件,然後從最上層元件開始觸發事件監聽器,再逐步由下層
元件觸發事件,一直輪到觸發事件的元件為止—也就是依由外向內的順序。
Microsoft 採用的做法,稱為事件
氣泡傳遞
(
bubbling
),這種做法是先透過觸發事件的
網頁元件觸發事件監聽器,再逐步由上層元件觸發事件,一直擴散到最上層元件為止—
也就是依由內向外的順序。
對我而言,事件氣泡傳遞的做法比較合邏輯,而且這也應該是大多數情況下會採用的做
法。W3C 最後是採取折衷方案—在規格中同時納入兩種做法。符合 W3C 規範的事件,
會先用事件捕捉的方式,由最上層元件開始由外向內觸發事件監聽器,一直到找到真正
觸發事件的元件,再開始用事件氣泡傳遞的方式,由內向外再次觸發事件監聽器。
如果想自行決定該採用哪種事件處理模式(捕捉或氣泡傳遞),就需要用到
addEventListener()
的第三組參數(是否採用捕捉模式)。如果傳入
ture
,就會採用捕
捉模式;如果傳入
false
,就會採用氣泡傳遞模式。
// 最後一組引數設定為 false,表示要採用氣泡傳遞模式
button.addEventListener("click", function(){ /* ... */ }, false);
相信絕大多數情況,應該都會需要用到氣泡傳遞模式。因此,如果實在不確定該選用哪
種模式,建議就把
addEventListener() ...