캡처링과 버블링을 활용하면 강력한 이벤트 핸들링 패턴인 이벤트 위임을 구현할 수 있다.
이벤트 위임은 비슷한 방식으로 여러 요소들을 다룰 때 사용한다.
요소마다 핸들러를 할당하지 않고, 요소의 공통 조상에 핸들러를 하나만 할당해도 여러 요소들을 한꺼번에 다룰 수 있다.
공통 조상에 할당한 핸들러에서 event.target
을 사용하면 실제 어디서 이벤트가 발생했는지 알 수 있다. 이를 이용해 이벤트를 핸들링한다.
<html>
<body>
<div class="menu">
<button class="items">첫번째 버튼</button>
<button class="items">두번째 버튼</button>
<button class="items">세번째 버튼</button>
</div>
<script>
for (const item of document.querySelectorAll(".items")) {
item.addEventListener("click", (e) => {
alert(`${e.target.innerText}입니다.`);
});
}
</script>
</body>
</html>
만약 위의 코드처럼 for문을 통해 모든 button 요소에 addEventListener를 호출한다면 메모리 측면에서 비효율적이고, 성능이 떨어질 수 있다.
따라서 이벤트 버블링을 이용해 부모 엘리먼트에게 이벤트를 위임하는 코드를 작성한다.
<html>
<body>
<div class="menu">
<button class="items">첫번째 버튼</button>
<button class="items">두번째 버튼</button>
<button class="items">세번째 버튼</button>
</div>
<script>
const menu = document.querySelector(".menu");
menu.addEventListener("click", (e) => {
alert(`${e.target.innerText} 입니당.`);
});
</script>
</body>
</html>
이벤트 위임을 사용하여 코드를 작성하면 장점이 있다.