이벤트 버블링
const parentEl = document.querySelector('.parent')
const childEl = document.querySelector('.child')
const anchorEl = document.querySelector('a')
window.addEventListener('click', ()=>{
console.log('Window')
})
document.documentElement.addEventListener('click', ()=>{
console.log('HTML')
})
document.body.addEventListener('click', ()=>{
console.log('Body')
})
parentEl.addEventListener('click', ()=>{
console.log('Parent')
})
childEl.addEventListener('click', ()=>{
console.log('Child')
})
anchorEl.addEventListener('click', ()=>{
event.preventDefault() // a 태그 기본동작 방지
console.log('Anchor')
})
- 하위 노드 이벤트에서 상위 노드의 이벤트 로 전파되는 개념을 이벤트버블링 이라고 합니다.
- 위에서는 window > documentElement > body > parent > child > anchor 의 관계를 가집니다.

이벤트 캡쳐링
window.addEventListener('click', ()=>{
console.log('Window')
})
document.documentElement.addEventListener('click', ()=>{
console.log('HTML')
})
document.body.addEventListener('click', ()=>{
console.log('Body')
}.{
capture: true
})
parentEl.addEventListener('click', ()=>{
console.log('Parent')
})
childEl.addEventListener('click', ()=>{
console.log('Child')
})
anchorEl.addEventListener('click', ()=>{
event.preventDefault() // a 태그 기본동작 방지
console.log('Anchor')
})
- 이벤트 버블링과는 반대로 상위객체 이벤트를 우선적으로 실행하고 하위요소로 내려가는 개념입니다.
- {capture: true} 속성을 통해 이벤트 캡쳐를 활성화할 수 있습니다.
- 이벤트 캡쳐 실행시 window > documentElement > body > ( anchor > child > parent )의 관계로 변합니다.

이벤트 전파 방지 - stopPropagation
parentEl.addEventListener('click', ()=>{
console.log('Parent')
event.stopPropagation() // 버블링 정지
})
- 하위 요소에서 상위 요소로의 이벤트 버블링을 정지합니다.
- parent에 추가시 parent > child > anchor 까지만 출력되며, parent 상위 요소의 이벤트 버블링은 차단됩니다.

'자바스크립트' 카테고리의 다른 글
JavaScript - 선택적 체이닝(Optional chaining) (0) | 2024.04.25 |
---|---|
JavaScript 구조 분해 할당 (0) | 2024.04.23 |
JavaScript 이벤트 (0) | 2024.04.22 |
JavaScript DOM - 크기와 좌표 (0) | 2024.04.22 |
JavaScript DOM - 생성,조회,수정 (2) (0) | 2024.04.20 |