Javascript
Javascript - 이벤트 버블링과 캡처링
개발따라김양
2022. 11. 15. 19:44
0. 이벤트 버블링과 캡처링
- 버블링
- 이벤트가 발생한 요소로부터 window까지 이벤트를 전파
- 캡처링
- window로부터 이벤트가 발생한 요소까지 이벤트를 전파
- 버블링과 캡처링, 두 타입의 이벤트 핸들러가 모두 존재하는 경우에,
캡처링 단계가 먼저 실행되고, 이어서 버블링 단계가 실행됩니다.
1. 이벤트 버블링(event bubbling)
- 한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고, 이어서 부모 요소의 핸들러가 동작합니다.
가장 최상단의 조상 요소를 만날 때까지 이 과정이 반복되면서 요소 각각에 할당된 핸들러가 동작합니다. - 브라우저는 선택된 요소가 버블링 단계에 대해 그것에 등록된 onclick 이벤트 핸들러를 가지고 있는지 확인하기 위해 검사하고,
만약 그렇다면 실행합니다. - 그리고서 그것은 바로 다음의 조상 요소로 이동하고 같은 일을 하고, 그리고서 그 다음 요소로 이동하고,
<html> 요소에 닿을 때까지 계속합니다.
2. 이벤트 캡처링(event capturing)
- 브라우저는 요소의 가장 바깥쪽의 조상 (<html>)이 캡처링 단계에 대해
그것에 등록된 onclick 이벤트 핸들러가 있는지를 확인하기 위해 검사하고, 만약 그렇다면 실행합니다. - 그리고서 <html> 내부에 있는 다음 요소로 이동하고 같은 것을 하고,
그리고서 그 다음 요소로 이동하고, 실제로 선택된 요소에 닿을 때까지 계속합니다.
3. 덧붙여서...
- addEventListener()
target.addEventListener(type, listener, useCapture)
//type - 수신할 이벤트 유형
//listener - 지정할 이벤트를 수신할 객체
//useCapture - 옵션, 수신기가 먼저 발동돼야 함을 나타내는 불리언 값
- Event.stopPropagation()
- 현재 이벤트가 캡처링/버블링 단계에서 더 이상 전파되지 않도록 방지
- 전파를 방지해도 이벤트의 기본동작은 실행되므로 링크나 버튼의 클릭을 막는 것이 아님
- 비교 ) preventDefault()
- 어떤 이벤트를 명시적으로 처리하지 않은 경우,
해당 이벤트에 대한 사용자의 기본 동작을 실행하지 않도록 지정
- 어떤 이벤트를 명시적으로 처리하지 않은 경우,
- 비교 ) preventDefault()
event.stopPropagation();
출처 : https://developer.mozilla.org/ko/docs/Learn/JavaScript/Building_blocks/Events
이벤트 입문 - Web 개발 학습하기 | MDN
이벤트(event)란 여러분이 프로그래밍하고 있는 시스템에서 일어나는 사건(action) 혹은 발생(occurrence)인데, 이는 여러분이 원한다면 그것들에 어떠한 방식으로 응답할 수 있도록 시스템이 말해주
developer.mozilla.org