[JavaScript] - Event delegation(事件委派)
此篇概念參照網路課程pluralsight
及網路資源。
event delegation
這是用來減少監聽的數目,但可以利用 bubbling 的方式來傳遞給實際想取得的元素的方式。
在 javascript 與 jQuery 中都各有方式可以使用。
利用 delegation 的概念可以針對一開始載入頁面不存在的元素,後來透過事件去動態新增的元素執行綁定事件。
舉例來說:
1 | $("#test [type=button]").on("click",function(){...}); |
1 | // event delegation |
上面兩種方式都可以綁定到id="text"
中的type="button"
的元素,但透過動態新增到#test
中的type="button"
在原本的綁定在執行 click 時,則不會觸發 function。
網路上範例:
參考來源
當我們click不同的小區塊時,就會console出它們個別的名字,例如:a、b或c。
實作方法是將click事件綁在parent上,藉由Event Bubbling來傳遞給child,而非直接將事件綁定在child上。優點是可減少監聽器的數目,缺點是由於需要判斷哪些child node是我們有興趣的項目,而必須多寫一些程式碼做判斷。在本例中,我們加上一個filter.child
,表示只對有.child
這個class的節點有興趣,而沒有加上.child
的節點則不被影響,例如click.subitem
這個節點之後就不會console它的名字。
1 | <div class="parent"> |
1 | $(".parent").on("click", ".child", function() { |
delegate-jQuery官方文件
jQuery參考
delegate與binding比較
Event delegation tutorial