๐ ์ด์ด์ง๋ ๊ธ
- ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow)
- ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation()
- ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing)
- ์ด๋ฒคํธ ์์(Event delegation )← Now !
๐ค ์ด๋ฒคํธ ์์์ด๋?
ํ์ ์์์ ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ถ์ด์ง ์๊ณ , ์์์์์์ ํ์ ์์์ ์ด๋ฒคํธ๋ฅผ ์ปจํธ๋กค ํ๋ ๋ฐฉ์
- ์ปจํ ์ด๋์ (์๋ ์์์์๋ ul) ํ๋์ ํธ๋ค๋ฌ๋ฅผ ํ ๋นํจ
- ํธ๋ค๋ฌ์ e.target ์ ์ฌ์ฉํด์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๊ฐ ์ด๋์ธ์ง ์์๋
- ์ํ๋ ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒ์ด ํ์ธ๋๋ฉด ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํจ (์๋ ์์์์๋ tagName์ผ๋ก ํ์ธํจ)
<body>
<ul>
<li>li 1</li>
<li>li 2</li>
<li>li 3</li>
</ul>
</body>
const ul = document.querySelector("ul");
ul.addEventListener("click", function (e) {
const targetli = e.target;
if (targetli.tagName != "LI") return; // li์์ ๋ฐ์ํ ๊ฒ์ด ์๋๋ผ๋ฉด ๋๋
console.log("li clicked ul event..." + targetli.innerHTML);
});
ul์ click ์ด๋ฒคํธ๋ฅผ ์คฌ๋๋ฐ li๋ฅผ ๋๋ฅด๋ฉด ๋์ผํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํจ
→ li๊ฐ 1000๊ฐ ์ ๋ ์์ ๋, ํ๋ํ๋ ์ด๋ฒคํธ๋ฅผ ๋ค ๋ฌ์์ฃผ์ง ์์๋ ๋๋ค๋ ๋ป!
์ด๋ฒคํธ ์์์ ์ฅ์
- ๋ง์ ํธ๋ค๋ฌ๋ฅผ ํ ๋นํ์ง ์์๋ ๋๋ฏ๋ก ์ด๊ธฐํ๊ฐ ๋จ์ํด์ง๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฝ๋จ
- ์์๋ฅผ ์ถ๊ฐํ ๋ ๋ง๋ค ํธ๋ค๋ฌ๋ ๊ฐ์ด ์ถ๊ฐํ์ง ์์๋ ๋๋ฏ๋ก ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง
- innerHTML์ด๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ๋ ์คํฌ๋ฆฝํธ๋ก ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋บ ์ ์๊ธฐ ๋๋ฌธ์ DOM ์์ ์ด ์ฌ์์ง
์ด๋ฒคํธ ์์์ ๋จ์
- ์ด๋ฒคํธ๊ฐ ๊ผญ ๋ฒ๋ธ๋ง ๋์ด์ผ ์คํ๋จ (๊ทผ๋ฐ ๋ช๋ช ์ด๋ฒคํธ์๋ ๋ฒ๋ธ๋ง์ด ์ง์๋์ง ์๋๊ฒ ์์ด์..)
- CPU ์์ ๋ถํ๊ฐ ์๊ธธ ์ ์๋ค(๊ณ ๋ ํ์ง๋ง ์ค์ ๋ก ํฐ ์ํฅ์ ์๋ค๊ณ ํ๋ค)
๐ ์ฐธ๊ณ
https://joshua1988.github.io/web-development/javascript/event-propagation-delegation/
์ด๋ฒคํธ ๋ฒ๋ธ๋ง, ์ด๋ฒคํธ ์บก์ฒ ๊ทธ๋ฆฌ๊ณ ์ด๋ฒคํธ ์์๊น์ง
(๊ธฐ๋ณธ) ์ด๋ฒคํธ ๋ฒ๋ธ๋ง, ์ด๋ฒคํธ ์บก์ฒ๋ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ฒคํธ ์์๊น์ง ์ด๋ฒคํธ ์ ๋ฌ ๋ฐฉ์๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ํํค์ณ ๋ด ๋๋ค.
joshua1988.github.io
https://racoonlotty.tistory.com/entry/javascript-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%9C%84%EC%9E%84
[javascript] ์ด๋ฒคํธ ์์
์บก์ฒ๋ง๊ณผ ๋ฒ๋ธ๋ง์ ํ์ฉํ๋ฉด ๊ฐ๋ ฅํ ์ด๋ฒคํธ ํธ๋ค๋ง ํจํด์ธ ์ด๋ฒคํธ ์์(event delegation) ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฒคํธ ์์์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ ์์๋ฅผ ๋ค๋ค์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฒคํธ ์
racoonlotty.tistory.com
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] window.requestAnimationFrame() (0) | 2021.10.07 |
---|---|
[JavaScript] Babel (0) | 2021.09.25 |
[JavaScript] ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation() (0) | 2021.09.17 |
[JavaScript] ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow) (0) | 2021.09.16 |
๋๊ธ