將單一事件偵聽器附加到父元素,而不是向每個子元素添加單獨的偵聽器,這種技術稱為事件委託。這是因為事件冒泡,事件(如單擊)在 DOM 樹中從子節點向上移動到父節點。透過在父級處理事件,可以節省記憶體並提高效能,尤其是在處理大量子元素或動態添加的元素時。
它是如何運作的?
當子元素上觸發事件(例如點擊)時,它不會就此停止。該事件向上冒泡到其父級,依此類推,沿著 DOM 樹向上冒泡,直到到達文檔根。事件委託透過將事件偵聽器放置在所有目標子元素的共同祖先上來利用這一點。此祖先會偵聽從子元素冒出的事件,並根據某些條件(例如事件類型或觸發事件的特定子元素)處理它們。
事件委託範例
假設我們有一個按鈕列表,並且我們想要處理每個按鈕的點擊事件。我們可以向其父元素添加一個偵聽器,而不是向每個按鈕新增單擊事件偵聽器。
現在,我們不再在每個按鈕上新增點擊事件偵聽器,而是在父
- 中新增偵聽器。元素。
document.getElementById("buttonList").addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); if (action === "delete") { console.log("Deleting item..."); } else if (action === "edit") { console.log("Editing item..."); } else if (action === "view") { console.log("Viewing item..."); } } });
點選事件監聽器附加到
- 元素(父元素)。在事件處理程序中,我們使用 event.target.tagName === "BUTTON" 檢查點擊的元素是否為按鈕。這確保我們只響應按鈕點擊。我們使用 data-action 屬性來決定要執行的操作(刪除、編輯或檢視)。這種方法更有效率且可擴展,特別是當我們有很多按鈕或動態添加新按鈕時。
動態元素的另一個例子
如果按鈕清單是動態產生的(例如,透過 JavaScript 新增按鈕),事件委託仍然可以完美運作,而無需重新附加事件偵聽器。
const ul = document.getElementById("buttonList"); // Dynamically adding new buttons const newButton = document.createElement("li"); newButton.innerHTML = '<button data-action="share">Share</button>'; ul.appendChild(newButton); // The same event listener on the parent will handle the new button ul.addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); console.log(action + " button clicked."); } });
事件冒泡:事件委託之所以有效,是因為事件冒泡,子元素上觸發的事件會傳播到其祖先。
對於動態內容有效:由於我們將事件監聽器附加到父級,因此它適用於稍後添加到 DOM 的元素。
效能:減少附加和管理多個事件偵聽器的開銷,尤其是在有大量子元素的情況下。
事件委託是高效 DOM 事件處理的重要技術,尤其是在處理許多元素或動態內容時。
以上是像您一樣學習 JavaScript 中的事件委託 5的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

本文系列在2017年中期進行了最新信息和新示例。 在此JSON示例中,我們將研究如何使用JSON格式將簡單值存儲在文件中。 使用鍵值對符號,我們可以存儲任何類型的

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

jQuery是一個很棒的JavaScript框架。但是,與任何圖書館一樣,有時有必要在引擎蓋下發現發生了什麼。也許是因為您正在追踪一個錯誤,或者只是對jQuery如何實現特定UI感到好奇

該帖子編寫了有用的作弊表,參考指南,快速食譜以及用於Android,BlackBerry和iPhone應用程序開發的代碼片段。 沒有開發人員應該沒有他們! 觸摸手勢參考指南(PDF)是Desig的寶貴資源


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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