1. ์ด๋ฒคํธ ๋ฒ๋ธ๋ง
๋ชจ๋ ์์์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ์์ ์ฝ์๋ก๊ทธ๋ฅผ ์ฐ๋๋ก ๋ง๋ค์ด๋ณด์.
- ์๋๋ html์ฝ๋์ด๋ค. ์ด๋ฐ์์ผ๋ก ์งฐ๊ตฌ๋๋ง ์๊ฐํ๊ณ ๋ฐ๋ผ์ค๋ฉด ๋๋ค.
- ์ฒจ๋ถ๋ css style sheet์ ๋ด์ฉ์ ์๋ตํ๊ฒ ๋ค.
โ๏ธ์ ๋ ฅ
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link href="../style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="box">
<ul id="list">
<li id="color">Red</li>
</ul>
</div>
<script>
const box = document.getElementById("box");
const list = document.getElementById("list");
const color = document.getElementById("color");
document.body.addEventListener("click", () => {
console.log("1. body");
});
document.body.addEventListener("click", () => {
console.log("2. div");
});
document.body.addEventListener("click", () => {
console.log("3. ul");
});
document.body.addEventListener("click", () => {
console.log("4. li");
});
</script>
</body>
</html>
โจ๊ฒฐ๊ณผ
- li๋ฅผ ํด๋ฆญํด๋ณด๋ฉด li, ul, div, body์์ผ๋ก ์ฐํ๋ค.
- ์ด๋ก์ ๋ค๋ชจ๋ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ์๊ธฐ ์์ ์ธ div์ ๋ถ๋ชจ์์์ธ body ๋ชจ๋ console์ ๋จ๊ฒจ์ง๋ค.
โ ์ ์ ์๋ ๊ฒ
- ์์์์์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ ๋ถ๋ชจ์ ๊ทธ ๋ถ๋ชจ๋ฅผ ํตํด ์ ํ๋๋ค.
- ํ์์์์์ ์์์์๋ก ์ฌ๋ผ๊ฐ๋๊ฒ.
- ๋ ์ด์ ๋ถ๋ชจ์์๊ฐ ์์ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณต๋๋ค.
- li์์ click ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ถ๋ชจ์์๋ก ์ ํ๋๋ค. ์ด๋ฒคํธ๊ฐ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ ๋ชจ์ต์ด ๊ฑฐํ์ฒ๋ผ ๋ณด์ธ๋ค ํด์ ์ด๊ฒ์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(event bubbling)์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
- ๋๋ถ๋ถ์ ์ด๋ฒคํธ๋ ๋ฒ๋ธ๋ง์ผ๋ก ์ ํ๋์ง๋ง ์ผ๋ถ๋ ๊ทธ๋ ์ง ์๋ค. ์ฌ๊ธฐ์ ์ผ๋ถ๋ focus์ blur๋ฅผ ์์๋ก ๋ค ์ ์๋ค. ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ผํ๋ค.
์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ์ด๋ฒคํธ๋ ๋์์ ๊ฐ์ผ๋, ๋ฒ๋ธ๋ง์์ ์ฐจ์ด๊ฐ๋๋ค.
์์1) focus ํน์ blur์ด๋ฒคํธ ๋ฐ์์, log์ ๋ํ๋ด๋ณด์.
โ๏ธ์ ๋ ฅ
- <body> - <div> - <input> ํ๊ทธ๊ฐ ์๋ค.
- ๊ฐ ์์๋ค์ focus์ด๋ฒคํธ ๋ฐ์ํ๊ฑฐ๋ blur์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ log๋ฅผ ์ฐ์ด์ค๋ค.
โจ๊ฒฐ๊ณผ
- input ์ฐฝ์ ํฌ์ปค์ค๋ฅผ ํ๋ฉด 3. input๋ง ์ฐํ๋ค.
ํฌ์ปค์ค๋ฅผ ๋ฒ์ด๋๋ ๋๊ฐ์ด 3.input๋ง ์ฐํ๋ค.
์ด๋, focus๋ฅผ focusin์ผ๋ก, blur๋ฅผ focusout์ผ๋ก ๋ฐ๊ฟ๋ณด์.
โ๏ธ์ ๋ ฅ
โจ๊ฒฐ๊ณผ
3. input, 2. div, 1. body ์์๋ก ์ฐํ๋ค.
focus๊ฐ ๋ฒ์ด๋๋ ๋ถ๋ชจ ์์๊ฐ ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋ง๋๋ฒ
- ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ธ์์ ์ผ๋ก ๋ง์ ์ ์๋ค.
- event.stopPropagation(); ์ ์คํํ๊ธฐ
โ๏ธ์ ๋ ฅ
โจ๊ฒฐ๊ณผ
- focusin์ ํ์ง๋ง ์ด๋ฒคํธ๋ฒ๋ธ๋ง์ด ๋ฐ์๋์ง ์์๋ค. focusout ๋ ๋ง์ฐฌ๊ฐ์ง(์ด๊ฑด ์๋ตํ๊ฒ ๋ค)
- ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋ง๋ ๊ฒฝ์ฐ๋ ๋ง์ด ์๊ธฐ๋๋ฌธ์ ์์ฃผ ์ฌ์ฉํ์ง๋ ์๋๋ค.
2. ์ด๋ฒคํธ ์์
- ์์ ์๊ฒ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฅธ ์์์์ ์ฒ๋ฆฌํ๋ ๊ฒ!
- ๋ฒ๋ธ๋ง์ ์ฌ์ฉํด์ ์์ํ ์ ์๋ค.
โ๏ธ์ ๋ ฅ
๐์ฝ๋ํด์
- <li>๊ฐ 4๊ฐ๊ฐ ์๊ณ ํด๋ฆญ์ ํ๋ฉด ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- clickHandler๋ผ๋ ํจ์๊ฐ ์๊ณ ๊ทธ ์์ ๋ชจ๋ <li>์ "on"class๋ฅผ ์ ๊ฑฐํ๊ณ ํด๋ฆญ๋ <li>์ "on"class๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ์๋ค.
- clickHandler๋ li์ ๊ฐ๊ฐ ๋ฑ๋ก๋๊ณ ์๋ค. (ํ๋จ document์ ์๋ ๋ถ๋ถ)
โจ๊ฒฐ๊ณผ
๋ฌธ์ ์
- ์ง๊ธ์ <li>๊ฐ 4๊ฐ์ง๋ง ์ซ์๊ฐ 100๊ฐ 200๊ฐ๊ฐ ๋๋ค๋ฉด? ํ๋ํ๋ ์ถ๊ฐ,์์ ํ๋๋ฑ์ ์ ์ง๋ณด์๊ฐ ํ๋ค๊ฒ์ด๋ค.
- ์ด๋ด ๋ li๊ฐ ์๋ ๋ถ๋ชจ์์์ธ ul์ ์ด๋ฒคํธ๋ฅผ ์์ํ ์ ์๋ค.
โ๏ธ์ ๋ ฅ
- ์ด ํ ์ค๋ง ์์ผ๋ฉด๋๋ค. 100๊ฐ 200๊ฐ๊ฐ ๋ผ๋ ์ฝ๋ ์์ ์ด ํ์์๋ค.
- <li>์์ ๋ฐ์ํ ์ด๋ฒคํธ๊ฐ <ul>์ ๋ฑ๋ก๋ผ ๋ถ๋ชจ์์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์คํ์์ผ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํด๋ดค๋ค.
โ๏ธ์ ๋ ฅ
event.target
: ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ์์
event.currentTarget
: ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฑ๋ก๋ ์์
: ์ง๊ธ์ ul์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํด๋์๋ค.
์ด๋ฒคํธ ์์์ ์ฌ์ฉํ์ง ์์๋ค๋ฉด target๊ณผ currentTarget์ ๋์ผํ์ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ์๋ ul (์ฃผํฉ์๋ถ๋ถ)์ ๋๋ฅด๋ฉด ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋๋ค.
๋ฐ๋ผ์ ํจ์์ ์กฐ๊ฑด์ ์ถ๊ฐํด์ค์ผํ๋ค.
โ๏ธ์ ๋ ฅ
- ์ฃผํฉ์ ๋ถ๋ถ์ ํด๋ฆญํด๋ ๋์ด์ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋์ง์๋๋ค.
'๐Development > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] DOM & EVENT #5 ์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler) (0) | 2023.03.27 |
---|---|
[JS] DOM์ด๋? #4 CSS style, class ์ ์ด (0) | 2023.03.26 |
[JS] DOM์ด๋? #3 ๋ ธ๋ ์์ฑ,์ถ๊ฐ,๋ณต์ ,์ญ์ (0) | 2023.03.26 |
[JS] DOM์ด๋? #2 ๋ถ๋ชจ, ์์, ํ์ Node (0) | 2023.03.26 |
[JS] DOM์ด๋? #1 Node์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ (0) | 2023.03.26 |