이벤트 버블링, 캡쳐링, 위임

JavaScript의 이벤트 버블링, 이벤트 캡처링, 이벤트 위임은 브라우저의 이벤트 처리 메커니즘을 효율적으로 활용하기 위해 등장하게 되었다. 각각의 개념과 원리, 그리고 어떻게 활용할 수 있는지는 다음과 같다.

이벤트 버블링 (Event Bubbling)

  • 요소에서 발생한 이벤트가 부모 요소들로 연속해서 전달되는 메커니즘
  • 이벤트가 발생한 요소부터 시작하여 부모 요소를 거슬러 올라가며 이벤트가 전파
<div id="parent">
  <button id="child">Click me</button>
</div>
document.getElementById('child').addEventListener('click', function () {
  console.log('Button clicked')
})

이벤트 캡처링 (Event Capturing)

  • 이벤트 버블링과 반대로, 최상위 부모 요소에서 시작하여 이벤트가 발생한 요소까지 이벤트를 전파하는 메커니즘
  • addEventListener 함수의 세 번째 인자로 true를 전달하여 활용
document.getElementById('parent').addEventListener(
  'click',
  function () {
    console.log('Parent clicked')
  },
  true
)

이벤트 위임 (Event Delegation)

  • 이벤트 버블링을 활용하여 부모 요소에서 이벤트를 처리하는 패턴
  • 여러 요소에 대한 이벤트 처리를 하나의 핸들러로 간결하게 처리 가능
  • 동적으로 생성되는 요소에 대해서도 효과적으로 적용
  • 하위 요소들이 많을 때 각각에 이벤트 핸들러를 할당하는 것보다 부모 요소에 하나의 핸들러를 할당하여 처리하는 것이 성능 및 유지보수 면에서 유리
<ul id="parent-list">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
document
  .getElementById('parent-list')
  .addEventListener('click', function (event) {
    if (event.target.tagName === 'LI') {
      console.log('Item clicked:', event.target.textContent)
    }
  })