본문 바로가기

프론트엔드 개발을 위한 자바스크립트_프로그래머스 스쿨

Event 처리

Todo의 완료 처리 및 삭제 구현과정에서 이벤트 캡쳐와 버블링에 대해 정확한 지식이

정리가 되어 있지 않다는 것을 깨닫고 아래와 같이 정리했습니다.

 

이벤트 등록

웹 애플리케이션에서 사용자의 입력을 받기위해 필요한 기능입니다.

참고로 addEvenetListener() 웹 API는 화면에서 동적인 기능을 추가하기 위해 사용된 기능입니다.

이벤트 캡쳐 - Event Capture

이벤트 캡쳐는 이벤트 버블링과 반대 방향으로 진행되는 이벤트 전파 방식입니다.

특정 이벤트가 발생 했을 때 최상위 요소인 태그에서 해당 태그를 찾아 내려갑니다.

<body>
	<div class="one">
		<div class="two">
			<div class="three">
			</div>
		</div>
	</div>
</body>

var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
	div.addEventListener('click', logEvent, {
		capture: true // default 값은 false입니다.
        // 해당 이벤트를 감지하기 위해 이벤트 버블링과 반대 방향으로 탐색합니다.
	});
});

function logEvent(event) {
	console.log(event.currentTarget.className);
}

따라서, <div class="three"></div>를 클릭해도 one two three 와 같은 결과가 나타납니다. 

이벤트 버블링 - Event Bubbling

이벤트 버블링은 특정 화면 요소에서 이벤트가 발생했을 때 해당 이벤트가 더 상위의 화면

요소들로 전달되어 가는 특성을 의미합니다.

HTML 요소는 기본적으로 트리 구조를 갖습니다. 여기서는 트리 구조상으로 한 단계 위에 있는 요소를
상위 요소라고 합니다.
<body>
	<div class="one">
		<div class="two">
			<div class="three">
			</div>
		</div>
	</div>
</body>

var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
	div.addEventListener('click', logEvent);
});

function logEvent(event) {
	console.log(event.currentTarget.className);
}

여기서 <div class="three"></div>를 클릭하면 three two one와 같은 결과가 나옵니다.

브라우저는 특정 화면 요소에서 이벤트가 발생했을 때 그 이벤트를 최상위에 있는 화면 요소까지

이벤트를 전파시킵니다.

event.stropPropagation()

stopPropagation() 웹 API를 사용하여 해당 이벤트가 전파되는 것을 막습니다.

이벤트 위임 - Event Delegation

아이템이 많아질수록 이벤트 리스너를 다는 작업 자체가 번거롭기에 이를 해결 할 수 있는 방법으로 사용됩니다. 하위요소에서 각각 이벤트를 붙이지 않고, 상위요소에서 하위요소 이벤트를 제어하는 방식입니다.

 

참고:

joshua1988.github.io/web-development/javascript/event-propagation-delegation/#%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%9C%84%EC%9E%84---event-delegation

 

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

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

joshua1988.github.io