event-bubblinglistener

event delegation을 설명해 주세요

예상 시간
6
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

event.target과 event.currentTarget은 어떻게 다른가요?

부가 설명

const list = document.querySelector(".todo-list");
 
list.addEventListener("click", (event) => {
  const button = event.target.closest("button[data-id]");
 
  if (!button) return;
 
  console.log(button.dataset.id);
});

각 button에 listener를 붙이지 않고 list 하나에서 처리합니다. closest를 쓰면 button 안의 icon이나 span을 클릭해도 원하는 button을 찾을 수 있습니다.

event delegation은 DOM event의 propagation을 이해하고 있어야 자연스럽게 설명할 수 있습니다. 이벤트는 capture 단계, target 단계, bubble 단계를 거칠 수 있고, 대부분의 UI 이벤트는 bubble됩니다.

다만 모든 이벤트가 bubble되는 것은 아니고, 너무 상위에 listener를 붙이면 관심 없는 이벤트까지 처리해야 해서 조건 분기가 복잡해질 수 있습니다.

한 줄 정리

event delegation은 bubbling을 이용해 부모 하나에서 여러 자식의 이벤트를 처리하는 패턴입니다.