밤토리
article thumbnail
728x90
 

이벤트 버블링, 이벤트 캡처 그리고 이벤트 위임까지

(기본) 이벤트 버블링, 이벤트 캡처링, 그리고 이벤트 위임까지 이벤트 전달 방식과 관련된 모든 것을 파헤쳐 봅니다.

joshua1988.github.io

 

이번 포스팅에서는 위의 블로그를 참고하여 이벤트 버블링과 캡처에 대해서 알아보고자 한다.

먼저 이벤트 버블링과 캡처에 대해 알기 전, 이벤트 등록을 위해 아래와 같이 작성하였다.

 

1) 이벤트 등록방법 : addEventListener

 

HTML

<!DOCTYPE html>
<html>
<body>
    <button>Button-Click</button>
    <div class="one">
        first-class
        <div class="two">
            second-class
            <div class="three">
                third-class
            </div>
        </div>
    </div>
    <script type="text/javascript" src="./Function.js"></script>
</body>
</html>

 

JS

//button이라는 선태자 or 요소를 선택한다.
const btn = document.querySelector('button');
//'click' event를 등록하는데, 아래의 addEvent라는 function에 event를 전달한다.
btn.addEventListener('click', addEvent); 

function addEvent (event) {
    console.log('@@@ click event 발생 ', event);
}

 

Button-Click이라는 버튼을 클릭했을때 이벤트가 등록됬음을 확인할 수 있다.

 

 

 

2) 이벤트 버블링 : 이벤트가 발생했을 때 하위의 요소가 상위 요소로 이벤트를 전달하는 방식

최상위 class : one -> two -> three 순

    <div class="one">
        first-class
        <div class="two">
            second-class
            <div class="three">
                third-class
            </div>
        </div>
    </div>

 

 

JS 추가

/*이벤트 버블링
  하위요소에서 상위요소로 이벤트가 전달되는 방식 */
const divs = document.querySelectorAll('div');
divs.forEach(function(div) {
	div.addEventListener('click', eventLog); 
});

function eventLog(event) {
    //현재 이벤트 타겟의 ClassName을 반환한다.
	console.log(event.currentTarget.className);
}

 

1. first-class를 클릭하면 className인 "one" 이 출력된다.

 

2. second-class를 클릭 한번만 해도 "two" -> "one" 순으로 class명이 2번 출력된다. 하위요소 -> 상위요소 전달
3. third-class 하나만 클릭해도 "three"-"two"-"one" 순으로 3가지 콘솔이 출력된다.하위 -> 상위요소 전달

 

3) 이벤트 캡처 : 이벤트가 발생했을 때 상위의 요소가 하위의 요소로 전달되는 방식

 

" capture: true "를 추가해주면 이벤트 캡처의 기능을 수행한다.

/*이벤트 캡처
  상위요소에서 하위요소로 이벤트가 전달되는 방식 */
const divs = document.querySelectorAll('div');
divs.forEach(function(div) {
	div.addEventListener('click', eventLog, {
        capture: true,
    }); 
});

third-class 한번의 클릭으로 상위의 요소가 하위의 요소로 이벤트 전달되었다.

728x90
profile

밤토리

@밤토리아이티

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!