[ JavaScript ] 자바스크립트 기본 문법 | 이벤트 전파(버블링과 캡쳐링)

2021. 2. 9. 21:28·Archive/Develop
목차
  1. 자바스크립트 기본 문법 : 이벤트 전파 - 캡처링(Capturing)
  2.  
  3. 자바스크립트 기본 문법 : 이벤트 전파 - 버블링(Bubbling)
728x90
반응형

이미지 출처 :    https://commons.wikimedia.org/wiki/File:JavaScript-logo.png

 

 

 

 

 

 

해당 포스팅은 생활코딩의 이고잉 님의 강의를 기반으로 개인 공부용으로 정리한 포스팅임을 미리 알립니다.

 

 

 


 

자바스크립트 기본 문법 : 이벤트 전파 - 캡처링(Capturing)

 

 

HTML 태그는 중첩되어 있습니다.

 

따라서 특정한 태그에서 발생하는 이벤트는 중첩되어 있는 태그들 모두가 대상이 되는 경우가 생깁니다.

 

 

이런 경우에, 중첩된 ㅌ내그들에 이벤트가 등록되어 있다면 어떻게 처리될까요?

 

 

어떤 태그부터 이벤트가 실행될까요?

 

 

 

예시로 살펴보도록 하겠습니다.

 

 

 

<html>
    <head>
        <style>
            html{border:5px solid red;padding:30px;}
            body{border:5px solid green;padding:30px;}
            fieldset{border:5px solid blue;padding:30px;}
            input{border:5px solid black;padding:30px;}
        </style>
    </head>
    <body>
        <fieldset>
            <legend>event propagation</legend>
            <input type="button" id="target" value="target">          
        </fieldset>
        <script>
        function handler(event){
            var phases = ['capturing', 'target', 'bubbling']
            console.log(event.target.nodeName, this.nodeName, phases[event.eventPhase-1]);
        }
        document.getElementById('target').addEventListener('click', handler, true);
        document.querySelector('fieldset').addEventListener('click', handler, true);
        document.querySelector('body').addEventListener('click', handler, true);
        document.querySelector('html').addEventListener('click', handler, true);
        </script>
    </body>
</html>

 

 

 

 

위의 예제 코드에서, 제일 안쪽에 존재하는 id 가 target 인 버튼을 눌러보도록 하겠습니다.

 

 

 

 

 

 

이벤트가 부모에서부터 발생해서 자식으로 전파되고 있는 것을 확인할 수 있습니다.

 

 

이러한 방식을 capturing이라고 합니다.

 

 

ie 낮은 버전에서는 작동하지 않기 때문에 많이 사용하지는 않습니다.

 

 

 

 

 

자바스크립트 기본 문법 : 이벤트 전파 - 버블링(Bubbling)

 

 

 

이번에는 코드를 아래와 같이 변경해보도록 하죠.

 

 

 

document.getElementById('target').addEventListener('click', handler, false);
document.querySelector('fieldset').addEventListener('click', handler, false);
document.querySelector('body').addEventListener('click', handler, false);
document.querySelector('html').addEventListener('click', handler, false);

 

 

 

addEventListener 의 세번째 인자가 false 로 변경되었습니다.

 

 

 

이 코드로 수정해서 실행하면, 아래 그림과 같은 결과가 출력됩니다.

 

 

 

 

 

 

캡처링의 케이스와 달리 순서가 반대로 된 것을 알 수 있습니다.

 

 

이렇게 자식부터 부모로 이벤트가 전파되는 것을 버블링(bubbling) 이라고 합니다.

 

 

 

이벤트 전파를 중간에 멈출 수도 있습니다.

 

 

 

코드를 다음과 같이 변경해보도록 하겠습니다.

 

 

 

 

function handler(event){
    var phases = ['capturing', 'target', 'bubbling']
    console.log(event.target.nodeName, this.nodeName, phases[event.eventPhase-1]);
}
function stophandler(event){
    var phases = ['capturing', 'target', 'bubbling']
    console.log(event.target.nodeName, this.nodeName, phases[event.eventPhase-1]);
    event.stopPropagation();
}
document.getElementById('target').addEventListener('click', handler, false);
document.querySelector('fieldset').addEventListener('click', handler, false);
document.querySelector('body').addEventListener('click', stophandler, false);
document.querySelector('html').addEventListener('click', handler, false);

 

 

 

 

 

 

다음과 같이 HTML 까지 이벤트 전파가 되지 않은것을 확인할 수 있습니다.

 

 

 

 

이처럼 이벤트 전파를 막기위해서는 일반적으로 event.stopPropagation() 을 사용합니다.

 

 

 

 

하지만 ie9 이전의 브라우저에서는 이벤트 전파를 막기 위해서

 

event.cancelBubble 프로퍼티를 사용해야합니다.

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ JavaScript ] 자바스크립트 기본 문법 | 폼(form)태그 이벤트(submit, change, focus,blur)  (0) 2021.02.10
[ JavaScript ] 자바스크립트 기본 동작 취소(preventDefault)  (0) 2021.02.10
[ JavaScript ] 자바스크립트 기본 문법 | 이벤트리스너(addEventListener, 클릭 이벤트)  (0) 2021.02.09
[ JavaScript ] 자바스크립트 기본 문법 | 문서의 기하학적 특성(스크롤 제어, Viewport, getBoundingClientRect())  (0) 2021.02.08
[ JavaScript ] 자바스크립트 기본 문법 | Text 객체 API(appendData,deleteData, insertData, nodeValue...)  (0) 2021.02.08
  1. 자바스크립트 기본 문법 : 이벤트 전파 - 캡처링(Capturing)
  2.  
  3. 자바스크립트 기본 문법 : 이벤트 전파 - 버블링(Bubbling)
'Archive/Develop' 카테고리의 다른 글
  • [ JavaScript ] 자바스크립트 기본 문법 | 폼(form)태그 이벤트(submit, change, focus,blur)
  • [ JavaScript ] 자바스크립트 기본 동작 취소(preventDefault)
  • [ JavaScript ] 자바스크립트 기본 문법 | 이벤트리스너(addEventListener, 클릭 이벤트)
  • [ JavaScript ] 자바스크립트 기본 문법 | 문서의 기하학적 특성(스크롤 제어, Viewport, getBoundingClientRect())
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    코드업 기초
    자바스크립트 객체
    파이썬 백준
    오라클
    카카오 100일 프로젝트
    Python
    코드업
    oracle db
    Django
    파이썬
    보안뉴스
    파이썬 문제
    백준 풀이
    자바스크립트
    Git
    백준 문제풀이
    코드업 파이썬 기초 100제
    백준
    Codeup
    파이썬 기초
    장고
    백준 파이썬
    docker
    javascript
    자바스크립트 API
    C++
    파이썬 알고리즘
    비박스
    Oracle
    파이썬 기초 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ JavaScript ] 자바스크립트 기본 문법 | 이벤트 전파(버블링과 캡쳐링)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.