Day 25 - Event Capture, Propagation, Bubbling and Once
이번 과제는 addEventListner
로 DOM 객체에 이벤트를 추가할 때 줄 수 있는 옵션들에 대한 것이다.
Bubbling
Bubbling에 대한 이해가 필요한데, 특정 DOM 객체에서 이벤트가 발생하면 기본적으로 Bubbling이 발생한다. Bubbling이란 특정 DOM 객체에서만 이벤트가 발생하지 않고 상위 DOM 객체까지도 이벤트가 올라가며 발생하는 것이다.
간단하게 예시를 들면,
1 | <html> |
여기서 id가 click
인 div
에 클릭 이벤트를 추가해서 클릭 이벤트가 발생하면 상위 div
, body
, html
까지 타고 올라가며 이벤트가 발생하는 것이다.
addEventListener
에 옵션 걸기
addEventListener
에서 추가적인 인자로 옵션을 주어 Bubbling 순서를 통제할 수 있다.
클릭 시 호출할 함수인 logText
를 먼저 만들어보자.
1 | function logText(e) { |
이제 div
객체에 click 이벤트를 옵션과 함께 추가한다.
1 | div.addEventListener("click", logText, { |
capture
속성으로 bubbling의 순서를 역으로 바꿀 수 있다. 기본 설정은 false
이며, true
로 주면 하위에서 상위 객체로 이벤트가 전달되는 것이 반대로 상위에서 하위 객체로 타고 내려간다.
once
속성으로 click
이벤트를 단 한번만 받을 수 있다. 이 속성 true
로 주면 해당 DOM 객체에서의 이벤트는 한 번밖에 실행되지 않는다.
Bubbling 금지시키기
하위 객체로든, 상위 객체로든 Bubbling이 발생하지 않게 할 수도 있다.
1 | e.stopPropagation(); |
DOM 객체에 내장된 stopPropagation()
을 호출하면 Bubbling이 발생하지 않는다. 앞에서 작성한 logText
함수로 예를 들면,
1 | function logText(e) { |
이렇게 Bubbling을 통제할 수 있다.