새발블로그
이벤트 전파 단계와 e.target vs e.currentTarget 본문
이벤트 전파(Event Propagation)란?
브라우저에서 이벤트가 발생하면, 해당 이벤트는 DOM 트리 상에서 부모 요소 → 자식 요소 또는 자식 요소 → 부모 요소 방향으로 전파됨.
이벤트 전파의 3단계
| 단계 | 설명 | 특징 |
| 1. 캡처링(Capturing Phase) | 부모 → 자식 방향으로 이벤트 탐색 | 잘 사용되지 않음 (addEventListener에 { capture: true } 옵션으로 가능) |
| 2. 타깃(Target Phase) | 이벤트가 실제 발생한 요소에서 실행 | 이벤트 발생 대상 (ex. 클릭된 버튼) |
| 3. 버블링(Bubbling Phase) | 자식 → 부모 방향으로 이벤트 전파 | 기본값이며 가장 많이 사용 |
전파 예시
<div id="outer">
<ul>
<li><img src="..." /></li>
</ul>
</div>
- img 태그를 클릭하면 이벤트는 다음과 같이 전달:
캡처링: div → ul → li → img 타깃: img 버블링: img → li → ul → div
이벤트 전파 제어 방법
| 방법 | 설명 | 예시 |
| event.stopPropagation() | 이벤트 전파(버블링/캡처링) 중지 | @click.stop |
| event.preventDefault() | 기본 동작 차단 (ex. form submit) | @submit.prevent |
| .once | 이벤트 한 번만 실행 | @click.once="handler" |
e.target vs e.currentTarget 차이
| 속성 | 설명 | 어떤 요소를 가리키는지 |
| e.target | 이벤트가 실제로 발생한 요소 | 가장 안쪽에 클릭한 DOM 요소 |
| e.currentTarget | 이벤트가 등록된 요소(핸들러 바인딩된 대상) | 바깥쪽에서 이벤트를 들은 요소 |
예시 코드
<div id="parent" @click="handleClick">
<button>Click me</button>
</div>
methods: {
handleClick(event) {
console.log('target:', event.target);
console.log('currentTarget:', event.currentTarget);
}
}
- event.target: <button> → 사용자가 실제 클릭한 요소
- event.currentTarget: <div id="parent"> → 핸들러가 등록된 요소
이미지 클릭 예시 (다단계 구조)
<div id="outer" @click="handleClick">
<ul>
<li>
<img src="img.png" />
</li>
</ul>
</div>
methods: {
handleClick(event) {
console.log('e.target:', event.target.tagName); // IMG
console.log('e.currentTarget:', event.currentTarget.tagName); // DIV
}
}
정리 요약
| 구분 | 의미 |
| 이벤트 전파 | 이벤트가 DOM 트리 상에서 이동하는 흐름 |
| 캡처링 → 타깃 → 버블링 | 전파 순서 |
| e.target | 실제 이벤트 발생한 요소 |
| e.currentTarget | 이벤트 리스너가 등록된 요소 |
'Client' 카테고리의 다른 글
| 프론트엔드 환경변수(.env) 관리, 우선순위 (0) | 2025.10.07 |
|---|---|
| 용어 정리 (0) | 2025.03.15 |
| 웹 서버 vs 웹 애플리케이션 서버(WAS) (0) | 2025.03.15 |
| SPA (0) | 2025.03.15 |
| JSON이란? (1) | 2025.03.15 |