๐ ์ด์ด์ง๋ ๊ธ
- ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow)
- ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation() ← Now !
- ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing)
- ์ด๋ฒคํธ ์์(Event delegation)
๐ค ๋ฒ๋ธ๋ง์ด๋?
ํน์ ํ๋ฉด ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ํด๋น ์ด๋ฒคํธ๊ฐ ๋ ์์์ ํ๋ฉด ์์๋ค๋ก ์ ๋ฌ๋๋ ํน์ฑ (propagate up)
<html>
<body>
<div>ํด๋ฆญ</div>
</body>
</html>
const html = document.documentElement;
const body = document.body;
const div = document.querySelector("div");
div.addEventListener("click", function () {
console.log("div");
});
body.addEventListener("click", function () {
console.log("body");
});
html.addEventListener("click", function () {
console.log("html");
});
์ด๋ฒคํธ ํ๋ก์ฐ์ default ๊ฐ์ Bubble ์ด๋ฏ๋ก,
div
→ body
→ html
์์ผ๋ก ์ด๋ฒคํธ๊ฐ ์งํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ ๋ฒ๋ธ๋ง์ ๋ง๋ e.stopPropagation()
e.stopPropagation()
: ๋ถ๋ชจ ํ๊ทธ๋ก์ ์ด๋ฒคํธ ์ ํ๋ฅผ ์ค์ง์ํด (๋ด ๋ค๋ก ๋ค ๋ฉ์ถฐโ!!!)
html
์ capture๋ก ์ค์ ๋ผ์๊ณ , body
๋ bubble๋ก ์ค์ ๋ผ ์๋ ์ํฉ์ด๋ผ๋ฉด
( Capture → Target → Bubble ์์๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ป๊ฒ ํ ์๊ฐ ์์ผ๋ฏ๋ก! )
โ html → (body : ๋๋ ๋์ค์ ์คํ ํด์ผ์ง) → โกdiv ์์๋ก ์คํ๋๋ค. (body : ์ด์ ๋ด ์ฐจ๋ก์ธ๋ฐ ์ ์์์ผ์ค...ใ ใ )
div์์ e.stopPropagation()
์ ํ์ผ๋ฏ๋ก ๋ฒ๋ธ๋ง์ ๋ฐฉ์งํด์ body๋ ์คํ๋์ง ์๋๋ค!
const html = document.documentElement;
const body = document.body;
const div = document.querySelector("div");
div.addEventListener("click", function (e) {
console.log("div");
e.stopPropagation(); //๋ถ๋ชจ ํ๊ทธ๋ก์ ์ด๋ฒคํธ ์ ํ ์ค์ง ์ ์ธ
});
body.addEventListener("click", function () {
console.log("body");
});
html.addEventListener("click", function () {
console.log("html");
}, true); //html์ Capture๋ก ์ง์ ๋จ
๐ ์ฐธ๊ณ
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์ด๋ฒคํธ ์์(Event delegation) (0) | 2021.09.23 |
---|---|
[JavaScript] ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow) (0) | 2021.09.16 |
[JavaScript] IIFE(Immediately Invoked Function Expression) (0) | 2021.09.15 |
[JavaScript] ์ด๋ฒคํธ ๋ฃจํ (0) | 2021.08.14 |
๋๊ธ