이벤트 캡쳐링과 버블링

GABMIN KIM·2022년 1월 22일
0

JavaScript

목록 보기
8/17
post-thumbnail

이벤트 버블링 (Event Bubbling)

특정 요소에서 이벤트가 발생했을 때 해당 이벤트가 더 상위의 요소들로 전달되어 가는 특성을 의미한다.

<form onclick="alert('form')">
  FORM
  <div onclick="alert('div')">
    DIV
    <p onclick="alert('p')">P</p>
  </div>
</form>

위의 예시와 같이 p태그의 클릭 이벤트를 실행하면 상위 div, form 태그 모두 실행하게 된다. 이 처럼 엘리먼트부터 차례대로 위로 올라가면서 이벤트들을 발생시키는 것이 이벤트 버블링이다.


이벤트 캡쳐링 (Event Capturing)

이벤트 캡쳐링은 이벤트 버블링과 반대 방향으로 진행되는 이벤트 전파 방식이다.
이벤트 리스너에 capture: true를 설정하면 사용할 수 있다.

target.addEventListener("click", function(){}, true);

StopPropagation()

위 API는 해당 이벤트가 전파되는 것을 막는다. 따라서, 이벤트 버블링의 경우에는 클릭한 요소의 이벤트만 발생시키고 상위 요소로 이벤트를 전달하는 것을 방해한다.
그리고 이벤트 캡쳐의 경우에는 클릭한 요소의 최상위 요소의 이벤트만 동작시키고 하위 요소들로 이벤트를 전달하지 않는다.
(이벤트 버블링 : 클릭한 요소의 이벤트만 발생 / 이벤트 캡쳐링 : 최상위 요소만 동작)


이벤트 위임 (Event Delegation)

하위 요소에 각각 이벤트를 붙이지 않고 상위 요소에서 하위 요소의 이벤트들을 제어하는 방식이다. 여러 개의 버튼에 하나씩 전부 이벤트 리스너를 적용시킬 필요 없이 상위 요소에만 이벤트 리스너를 적용하여 하위 요소의 이벤트를 제어 할 수 있다.

<h1>오늘의 할 일</h1>
<ul class="itemList">
	<li>
		<input type="checkbox" id="item1">
		<label for="item1">이벤트 버블링 학습</label>
	</li>
	<li>
		<input type="checkbox" id="item2">
		<label for="item2">이벤트 캡쳐 학습</label>
	</li>
</ul>

var itemList = document.querySelector('.itemList');
itemList.addEventListener('click', function(event) {
	alert('clicked');
});

화면의 모든 인풋 박스에 일일이 이벤트 리스너를 추가하는 대신 이제는 인풋 박스의 상위 요소인 ul 태그, .itemList에 이벤트 리스너를 달아놓고 하위에서 발생한 클릭 이벤트를 감지한다(이벤트 버블링을 활용)


출처

https://velog.io/@soulee__/JavaScript-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90-%EC%9C%84%EC%9E%84
https://jess2.xyz/JavaScript/bubbling-capturing/
https://mygumi.tistory.com/315
https://www.youtube.com/watch?v=IVp0cwoYgt4

profile
목표를 성취하는 개발자가 되겠습니다.

0개의 댓글