[javascript] 버블링과 캡쳐링

sangyong park·2022년 9월 27일
0
post-thumbnail
post-custom-banner

이벤트 캡처링(Event Capturing)

이벤트가 발생하면 최상위 태그에서 해당 태그를 찾아 내려간다.

이벤트 버블링(Event Bubbling)

반대로 이벤트가 발생하면 이벤트가 발생한 해당 태그 부터 탐색을 해서 부모 태그까지 찾아간다.

이벤트 전파 차단

<script>

	event.stopPropagation()
    
    event.ImmediatePropagation()
</script>

위 두 가지 방법으로 이벤트 전파를 차단할 수 있지만 좋지 않은 방법이다.

두 가지 방법을 사용하면 다음에 오는 이벤트들을 다 차단하고 해당 이벤트만 실행하기 때문에
코드 흐름에 좋지않다.

event.target과 currentTarget 이용

이벤트가 발생하지 말아야 할 부모 요소에 event.target 과 currentTarget 을 비교하여 같지 않다면 return값을 사용해서 처리하지 않겠다고 선언해준다.

<script>
      const outer = document.querySelector('.outer');
      const middle = document.querySelector('.middle');
      const button = document.querySelector('button');

      outer.addEventListener('click', event => {
      // target과 currentTarget을 비교해서 같지 않으면 처리하지 않겠다
        if (event.target !== event.currentTarget) {
          return;
        }
        console.log(`outer: ${event.currentTarget}, ${event.target}`);
      });
      middle.addEventListener('click', event => {
      // target과 currentTarget을 비교해서 같지 않으면 처리하지 않겠다
        if (event.target !== event.currentTarget) {
          return;
        }
        console.log(`middle ${event.currentTarget}, ${event.target}`);
      });
      button.addEventListener('click', event => {
        console.log(`button1 ${event.currentTarget}, ${event.target}`);
      });
      button.addEventListener('click', event => {
        console.log(`button2 ${event.currentTarget}, ${event.target}`);
      });
    </script>

profile
Dreams don't run away It is always myself who runs away.
post-custom-banner

0개의 댓글