2014-11-22 83 views

回答

5

請參閱從Event dispatch and DOM event flow如下圖:

graphical representation of an event dispatched in a DOM tree using the DOM event flow

有三種event phases

  • 捕獲階段:事件對象必須通過從目標的祖先傳播defaultView給目標的父母。 這個階段也被稱爲捕獲階段。爲此階段註冊的事件監聽器 必須在事件到達其目標 之前處理事件。

  • 目標階段:事件對象必須到達事件對象的event target。這個階段也被稱爲目標階段的 階段。在此階段註冊的事件監聽器必須在事件達到目標時處理事件。如果event type指示該事件不能冒泡,則在完成此階段後,事件對象 必須停止。

  • 氣泡相:事件對象傳播通過以相反的順序目標的祖先,開始與目標的父 並與defaultView結束。這個階段也被稱爲 冒泡階段。在此階段註冊的事件偵聽器必須在事件達到目標後處理事件。

因此,主要區別在於,事件偵聽器添加到window將處理事件之後的事件偵聽器在泡沫階段的情況下加入到document;以及在捕獲階段之前。

+0

我猜測在文檔上使用窗口的原因是因爲它不必傳播到目前爲止? – Yay295 2014-11-22 02:11:46

+0

@ Yay295你的意思是相反的嗎? – MCTaylor17 2014-11-22 02:36:02

+0

據我所知,如果你使用窗口,它將進入窗口 - >事件 - >窗口,並且如果你使用文檔,它會進入窗口 - >文檔 - >事件 - >文檔 - >窗口。 – Yay295 2014-11-22 02:44:02