실습용 CodePen


<aside> 💡 이벤트 버블링/캡처링, stopPropagation(), preventDefault()까지 모두 실습할 수 있도록 작성함

</aside>

https://codepen.io/colorfilter/pen/rNmXxEe

이벤트 전파 | Event Propagation


<aside> <img src="/icons/search_gray.svg" alt="/icons/search_gray.svg" width="40px" />

이벤트 전파의 3단계

  1. 캡처링 단계: 이벤트가 문서 루트(window)부터 이벤트 타깃의 조상 요소들을 따라 아래로 전파되는 단계
  2. 타깃 단계: 이벤트가 실제 타깃 요소에서 발생하는 단계
  3. 버블링 단계: 이벤트가 타깃 요소에서 시작해 상위 요소 방향으로 거슬러 올라가는 단계 </aside>

버블링 Bubbling / 캡처링 Capturing

위 코드펜 예제에서 하단에 있는 <span> 태그를 클릭하면 span 영역 → p 영역 → div 영역 순으로 콘솔이 찍힌다. span 영역을 클릭한 순간 브라우저가 이벤트를 감지해서 문서 루트(window)까지 이벤트가 전달되는 것. 이것을 이벤트 버블링이라고 부른다.

이벤트 캡처링은 버블링 반대방향으로 진행된다. addEventListener() 3번째 인자를 true로 설정하면 되며, 이는 { capture: true }를 명시한 것과 같다. 기본값은 { capture: false } 이다.

<span> 태그를 클릭하면 div 영역 → p 영역 → span 영역 순으로 콘솔이 찍힌다. <span> 태그를 클릭한 순간 루트(window)부터 document → html → body → … 이벤트가 발생한 <span> 타깃 태그까지 내려가며 탐색하기 시작한다. 탐색하는 과정에서 중간에 거쳐가는 요소에 할당된 핸들러가 실행돼서 콘솔이 찍히는 것.

리스너 옵션

addEventListener의 3번째 인자엔 capture외에 2가지 옵션이 더 있다.

리스너 제거 removeEventListener