JavaScript事件的幾個細節
一、是捕獲還是冒泡
昨天被問到一個問題:事件流有幾個階段?在這幾個階段中,事件一共發生幾次?
問題很簡單,但事件總共發生幾次有點亂。總覺得捕獲也能觸發事件、冒泡也能觸發事件,可事件確實只發生了一回啊!所以寫篇文章梳理一下,對此很清楚的同學可以跳過了。
子問題1:事件流有幾個階段?
「DOM2級事件」規定的事件流包含三個階段:事件擷取階段、處於目標階段、事件冒泡階段。
1. IE9以前的IE瀏覽器都只支援後兩個階段,也就是處於目標階段和事件冒泡階段。這個順序很好理解,在巢狀層次最深的節點上接收事件,然後逐級向上傳播到父級節點。
2. 早期的Netscape團隊提出的另一個事件流叫做事件擷取。即頂層節點應該更早的接收事件,逐步傳播到嵌套層次最深的節點,也就是事件捕獲階段和處於目標階段
3. 現代瀏覽器如chrome、ff、IE9等支援整個三個階段。
子問題2:在這幾個階段中,事件一共發生幾次?
事件發生時,「DOM2級事件」的事件流都會經歷三個階段(捕獲->處於目標->冒泡),但不是每個階段都能發生事件。對於某個節點,addEventListener方法第三個參數如果為true,則事件發生在捕獲階段;如果為false,則事件發生在冒泡階段。所以事件只發生了一次!
如果外層節點想在捕獲和冒泡階段都發生事件,那就註冊兩次吧。
附帶一句,「DOM0級事件」(elem.onclick = function () {…})也是存在事件冒泡的。
二、事件的註冊順序
在同一節點上註冊多個事件,
使用addEventListener,發生先後順序依據事件新增的順序;過來的,後註冊的先發生。
三、移除事件
移除事件的方法removeEventListener與detachEvent針對事件發生時的同一個回呼函數,所以註冊事件時使用匿名函數的情況是不能被移除的。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
