2016-07-21 71 views

回答

1

本質上,這取決於。有兩個階段的事件,捕捉(首先發生),文件下來,冒泡去元素了。

JS可以同時執行這兩個操作,這就是爲什麼當創建一個自定義的事件監聽時,您有第三個布爾變量,例如,

parent.addEventListener('click',doSomething2,true) child.addEventListener('click',doSomething,false)

如果其最後一個參數是真實的事件處理程序設置爲捕獲階段,如果是假的事件處理程序被設置在冒泡階段。

回到示例代碼參考和引用this page

如果用戶單擊子元素上會發生以下情況:

  1. 單擊事件在捕獲階段開始。該事件查看是否有任何子元素的祖先元素具有捕獲階段的onclick事件處理程序。

  2. 該事件在父項上找到一個。 doSomething2()被執行。

  3. 事件向下傳遞到目標本身,找不到捕獲階段的事件處理程序。該事件進入冒泡階段並執行doSomething(),該冒泡階段註冊給孩子。

  4. 事件再次向上移動並檢查目標的任何祖先元素是否具有冒泡階段的事件處理程序。事實並非如此,所以沒有任何反應。

我上面鏈接的頁面有辦法的詳細信息,但希望這回答的基本問題。