하위 Element에 이벤트가 발생했을 때 그 Element부터 시작해서 상위 Element까지 이벤트가 전달되는 방식.
Default로 적용되어있다.
document.querySelector('li').addEventListener('click', () => console.log('li 클릭'));
document.querySelector('ul').addEventListener('click', () => console.log('ul 클릭'));
document.querySelector('div').addEventListener('click', () => console.log('div 클릭'));
result :
li 클릭
ul 클릭
div 클릭
이벤트 버블링과 반대되는 개념으로 하위 Element에 이벤트가 있을 때 상위 Element부터 하위 Element로 이벤트가 전달되는 방식.
<div>
<ul>
<li>예시</li>
</ul>
</div>
<script>
document
.querySelector("li")
.addEventListener("click", () => console.log("li 클릭"));
document
.querySelector("ul")
.addEventListener("click", () => console.log("ul 클릭"), { capture: true });
document
.querySelector("div")
.addEventListener("click", () => console.log("div 클릭"));
</script>
result :
li 클릭
ul 클릭
div 클릭
이벤트 위임 이란 하위 엘리먼트들이 여러개 있을 때, 하위 엘리먼트들에 각각 이벤트 핸들러를 달지 않고 상위 엘리먼트에 이벤트 핸들러를 달아 하위 엘리먼트들을 제어하는 방식이다. 이 패턴으로 얻는 이점들은 다음과 같다.
예시를 살펴보자.
<ul onclick="alert(event.type + '!')">
<li>첫번째</li>
<li>두번째</li>
<li>세번째</li>
</ul>
li
에 각각 핸들러를 달지 않고 상위 엘리먼트인 ul
에만 달았다는 걸 확인할 수 있다. 무조건 이벤트 위임이 좋은 것은 아니기 때문에 상황에 맞게 잘 사용하도록 하자.