JavaScript 中的事件傳播描述了事件被觸發後流經 DOM 的方式。主要有兩個階段:事件冒泡和事件擷取。理解這些概念對於有效管理事件監聽器至關重要。
當事件被觸發時,它會按以下順序在 DOM 中傳播:
在冒泡階段,事件從目標元素開始,並透過其祖先元素向上冒泡。
<div> <pre class="brush:php;toolbar:false">document.getElementById("parent").addEventListener("click", function() { console.log("Parent clicked"); }); document.getElementById("child").addEventListener("click", function() { console.log("Child clicked"); });
點選按鈕時輸出:
Child clicked Parent clicked
使用 stopPropagation() 方法阻止事件進一步傳播。
document.getElementById("child").addEventListener("click", function(event) { event.stopPropagation(); console.log("Child clicked"); });
在捕獲階段,事件從 DOM 樹的根向下傳播到目標元素。
document.getElementById("parent").addEventListener( "click", function() { console.log("Parent clicked"); }, true // Enables capturing phase ); document.getElementById("child").addEventListener("click", function() { console.log("Child clicked"); });
點選按鈕時輸出:
Parent clicked Child clicked
Feature | Event Bubbling | Event Capturing |
---|---|---|
Order | From target to ancestors | From root to target |
Default Behavior | Enabled | Disabled unless specified |
Use Case | Commonly used for delegation | Less commonly used |
事件委託利用事件冒泡來有效處理多個子元素的事件。
<div> <pre class="brush:php;toolbar:false">document.getElementById("parent").addEventListener("click", function() { console.log("Parent clicked"); }); document.getElementById("child").addEventListener("click", function() { console.log("Child clicked"); });
使用 PreventDefault() 方法來停止元素的預設行為而不影響傳播。
Child clicked Parent clicked
document.getElementById("child").addEventListener("click", function(event) { event.stopPropagation(); console.log("Child clicked"); });
掌握事件冒泡和捕獲可確保更好地控制事件驅動的應用程式並提高程式碼效率。
嗨,我是 Abhay Singh Kathayat!
我是一名全端開發人員,擁有前端和後端技術的專業知識。我使用各種程式語言和框架來建立高效、可擴展且用戶友好的應用程式。
請隨時透過我的商務電子郵件與我聯繫:kaashshorts28@gmail.com。
以上是掌握 JavaScript 中的事件冒泡與捕獲的詳細內容。更多資訊請關注PHP中文網其他相關文章!