Day.24 「你點了按鈕~同時也點了網頁本身!」 —— JavaScript 事件冒泡(Event bubbling)
Day.24 「你點了按鈕~同時也點了網頁本身!」 —— JavaScript 事件冒泡(Event bubbling)
我們上一個篇章認識了綁定事件,了解到不管是什麼節點,都可以綁定事件
那為什麼 JavaScript 會知道我們觸發事件?
事件觸發流程
當我們點擊網頁中任何一個元素,是不是也等於點擊到網頁本身!
而點擊元素與網頁本身這個過程是有順序的,稱為事件流程,事件流程共有兩個機制:
- 事件捕獲
- 事件冒泡
事件捕獲(Event Capturing)
當我們點擊藍色的 div
時,網頁會從根目錄開始往下找到我們點擊的元素,這個過程稱為事件捕獲
事件冒泡(Event Bubbling)
而事件冒泡則剛好反過來!
當我們點擊藍色的 div
時,會從我們點擊的元素往上傳遞到根目錄,這個過程稱為事件捕獲
而如何確認冒泡的情況是否發生?
就把每個元素都綁上 onclick
點擊事件,連 body
也綁定。
1 |
|
1 |
|
這時點擊藍色 div
就會觸發事件冒泡,會看到先出現藍色依序往根標籤傳遞,而因為沒點擊綠色,所以綠色不會觸發!
1 |
|
在大部分情況下,冒泡事件都是有用的,例如:拖曳功能,如果不希望冒泡事件觸發,可以針對觸發事件元素取消冒泡事件
1 |
|
這樣點擊就只會觸發藍色的事件,不會往上觸發了!
總結
這也是 JavaScript 經常會接觸到的事件,只是平常我們都會需要冒泡事件,只有特定時候才會取消冒泡,算是前端基礎面試題