Event Phase
는 최상위 요소부터 하위요소(타겟요소)로 전파되고<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<main>
<div>
<p>
<span>Event Phase를 설명 중입니다.</span>
</p>
</div>
</main>
</body>
</html>
이벤트가
상위 -> 하위
로 전해지는 것을 Event Capturing
하위 -> 상위
요소로 전해지는 것을 Event Bubbling
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<main>
<div>
<p>
나는 p태그 입니다.
<span>Event Phase를 설명 중입니다.</span>
</p>
</div>
</main>
</body>
</html>
<script>
const s = document.querySelector("span");
const p = document.querySelector("p");
s.addEventListener("click", () => console.log("i'm span"));
p.addEventListener("click", () => console.log("i'm paragraph"));
</script>
addEventListener
를 적용하고addEventListener
를 적용 후<console.log 결과>
i'm span // 하위 요소인 span 요소만 클릭했을 뿐인데
i'm paragraph // 상위 요소인 p의 이벤트도 작동시킨다.
addEventListener
의 인자로 event 객체
를 전달하면event.phase
로 이벤트 전파 단계를 볼 수 있는데<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<main>
<div>
<p>
나는 p태그 입니다.
<span>Event Phase를 설명 중입니다.</span>
</p>
</div>
</main>
</body>
</html>
<script>
const s = document.querySelector("span");
const p = document.querySelector("p");
s.addEventListener("click", (event) =>
console.log(`i'm span ${event.eventPhase}`) // i'm span 2 (타겟 요소 도착 단계)
);
p.addEventListener("click", (event) =>
console.log(`i'm paragraph ${event.eventPhase}`) // i'm paragraph 3 (이벤트 버블링 단계)
);
</script>
Capturing 단계 = 1
타겟 요소에 도착 단계 = 2
Bubbling 단계 = 3
event.stopPropagation()
event.preventDefault()
a
태그, form
태그웹의 작동 원리는 공부할 게 많다.
그래서 더 흥미로운 거 같고
지금까지는 원리를 모르고 이벤트를 막는 메서드만 사용했는데
원리를 알고 사용하게 되서 기쁘다.
쵝고에요