<div onclick="alert('div에 할당한 핸들러!')">
<em><code>EM</code>을 클릭했는데도 <code>DIV</code>에 할당한 핸들러가 동작합니다.</em>
</div>
: 한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고, 부모 요소의 핸들러가 동작하는 현상(가장 최상단의 조상 요소를 만날 때까지 반복)
focus
같이 몇몇 이벤트 제외)event.target
event.target
: 실제 이벤트가 시작된 타깃 요소, 버블링이 진행되어도 변하지 않음this
(=event.currentTarget
): 현재 실행 중인 핸들러가 할당된 요소 참조<html>
요소를 거쳐 document
객체를 만날 때까지 각 노드에서 모두 발생(몇몇 이벤트는 window
객체까지 거슬러 올라가기도 함)event.stopPropagation()
: 이벤트를 완전히 처리하고 난 후 버블링을 중단하도록 명령event.stopImmediatePropagation()
: 버블링을 멈추고 + 요소에 할당된 다른 핸들러의 동작도 막음 -> 요소에 할당된 특정 이벤트를 처리하는 핸들러가 모두 동작하지 않도록💥 아키텍처를 잘 고려해, 꼭 필요한 경우에만 버블링을 막자!
elem.addEventListener(..., {capture: true})
사용capture
값이 false
(default)이면 핸들러가 버블링 단계에서 동작, true
이면 캡처링 단계에서 동작