Bubbling & capturing

김승훈·2020년 11월 4일
0

JavaScript

목록 보기
5/16
<div class="outer">
  <div class="middle">
    <button>click me</button>
  </div>
</div>
const outer = document.querySelector('.outer');
const middle = document.querySelector('.middle');
const button = document.querySelector('button');

outer.addEventListener('click', () => {
  //stopPropagation은 사용하지 않는 것이 좋다 .
  if(event.target !== event.currentTarget){
  	return;
	} //대체
  onsole.log('outer')
});
middle.addEventListener('click', () => {
  console.log('middle')
});
button.addEventListener('click', () => {
  console.log('button')
});

버블링

버블링(bubbling)의 원리는 간단합니다.

한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고, 이어서 부모 요소의 핸들러가 동작합니다. 가장 최상단의 조상 요소를 만날 때까지 이 과정이 반복되면서 요소 각각에 할당된 핸들러가 동작합니다

거의 모든 이벤트는 버블링 됩니다.
키워드는 ‘거의’ 입니다.

focus 이벤트와 같이 버블링 되지 않는 이벤트도 있습니다. 버블링 되지 않는 이벤트의 종류에 대해선 조금 후에 알아보겠습니다. 몇몇 이벤트를 제외하곤 대부분의 이벤트는 버블링 됩니다.

캡처링

이벤트엔 버블링 이외에도 ‘캡처링(capturing)’ 이라는 흐름이 존재합니다. 실제 코드에서 자주 쓰이진 않지만, 종종 유용한 경우가 있으므로 알아봅시다.

표준 DOM 이벤트에서 정의한 이벤트 흐름엔 3가지 단계가 있습니다.

캡처링 단계 – 이벤트가 하위 요소로 전파되는 단계
타깃 단계 – 이벤트가 실제 타깃 요소에 전달되는 단계
버블링 단계 – 이벤트가 상위 요소로 전파되는 단계

캡처링 단계에서 뭔가를 해야 되는 일은 거의없다.
버블링 캡처링

0개의 댓글