自學日記

學習程式相關知識及學習法

0%

JS 事件委派

事件委派(Event Delegation)

事件委派類似綁定作用,於之前文章中有說明到冒泡事件與監聽事件之間的特性,我們進一步去探討假如過多的監聽事件,我們可以使用事件委派(event delegation)去做統一處理。

說明事件委派、事件物件

事件委派註冊

我們以一段code來說明,

1
2
3
4
5
6
7
8
9
10
11
<div id="menu">
<button data-key="add">add</button>
<button data-key="update">update</button>
<button data-key="remove">remove</button>
</div>
<script>
let menu=document.querySelector("#menu");
menu.addEventListener("click", function(){
console.log("Clicked")
});
</script>

上述code我們將監聽事件綁(註冊)在父層,這就是事件委派最初步的概念。
因為我們發現無論點擊(click)哪個按鈕,父層都會經事件流程中的冒泡過程而同樣被點擊,上述我們設定只有三個btn,假如今天有10個、100個,依然可以藉由綁定在父層,而皆能被點擊。

事件物件event.target屬性

由上述概念我們明白藉由註冊在父層以取得統一的點擊管理,接下來我們可以藉由e.target屬性,來區分點擊的按鈕,code撰寫如下:

1
2
3
4
5
6
7
8
9
10
11
12
<div id="menu">
<button data-key="add">新增</button>
<button data-key="update">更新</button>
<button data-key="remove">移除</button>
</div>
<script>
let menu=document.querySelector("#menu");
menu.addEventListener("click", function(event){
let key=event.target.getAttribute("data-key");
console.log(event.target.textContent);
});
</script>

顯現如下: