์น ๊ฐ๋ฐํ๋ฉด์ ์ด๋ฒคํธ ๊ฑธ ๋ ์ด๋ ๊ฒ ์ฐ๋ ์ฝ๋ ๋ง์ด ๋ณด์
จ์ฃ ?
element.addEventListener('click', handler, true);
๊ทผ๋ฐ ๋ง์ง๋ง true๋ ๋๋์ฒด ๋ญ๊น์?
์ด๊ฒ ๋ฐ๋ก "์บก์ฒ๋ง"์ด๋ "๋ฒ๋ธ๋ง"์ด๋๋ฅผ ๊ฒฐ์ ํ๋ ํต์ฌ์ด์์!
์ง์ง ์ฝ๊ฒ ์๋ ค๋๋ฆด๊ฒ์ ๐
์ด๋ฒคํธ ์บก์ฒ๋ง(Capturing)๊ณผ ๋ฒ๋ธ๋ง(Bubbling) ์ฝ๊ฒ ์ดํดํ๊ธฐ
์น์์ ๋ฒํผ ๊ฐ์ ๊ฑธ ํด๋ฆญํ๋ฉด, ๊ทธ ์ด๋ฒคํธ๋ ์ด๋ป๊ฒ ์ ๋ฌ๋ ๊น์?๋ฐ๋ก! "์ด๋ฒคํธ ์ ํ(Event Propagation)"๋ผ๋ ๊ณผ์ ์ด ์์ด์ ๐งญ์ฌ๊ธฐ์ ๋ ๊ฐ์ง ํ๋ฆ์ด ์์ด์: ๐ 1. ์บก์ฒ๋ง(Capturing)์ด๋?๐ ์ด๋ฒคํธ๊ฐ
chuyj15.tistory.com
โ addEventListener ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
element.addEventListener('์ด๋ฒคํธ์ด๋ฆ', ์คํํจ์, useCapture);
๋ง์ง๋ง useCapture ์๋ฆฌ๊ฐ ์ค์ํฉ๋๋ค!
true ๐ ์บก์ฒ๋ง ๋จ๊ณ์์ ์คํ
false ๐ ๋ฒ๋ธ๋ง ๋จ๊ณ์์ ์คํ (๊ธฐ๋ณธ๊ฐ)
โ
์ด๋ฒคํธ๋ ์ด๋ป๊ฒ ์ ํ๋ ๊น?
์ด๋ฒคํธ๋ ๋ฐ์ํ๋ฉด ์๋ 3๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์:
์บก์ฒ๋ง ๋จ๊ณ
๐ document๋ถํฐ ์๋๋ก ↓ ๋ด๋ ค์ด
ํ๊น ๋จ๊ณ
๐ ์ค์ ํด๋ฆญ๋ ๊ทธ ์์
๋ฒ๋ธ๋ง ๋จ๊ณ
๐ ํด๋ฆญ๋ ์์์์ ์๋ก ↑ ์ฌ๋ผ๊ฐ
โ
true vs false ์์
<div id="parent">
<button id="child">ํด๋ฆญ</button>
</div>
// ์บก์ฒ๋ง ๋จ๊ณ
document.getElementById('parent').addEventListener('click', function() {
console.log('๋ถ๋ชจ');
}, true);
// ๋ฒ๋ธ๋ง ๋จ๊ณ
document.getElementById('child').addEventListener('click', function() {
console.log('์์');
}, false); // ๊ธฐ๋ณธ๊ฐ
์ด ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฝ์์ ์ด๋ ๊ฒ ์ฐํ์:
๋ถ๋ชจ
์์
์?
๋จผ์ ์บก์ฒ๋ง ๋จ๊ณ๋๊น ๋ถ๋ชจ(true)๊ฐ ๋จผ์ ์คํ๋๊ณ ,
๊ทธ ๋ค์ ๋ฒ๋ธ๋ง ๋จ๊ณ์์ ์์(false)์ด ์คํ๋๋๊น์!
โ
์ง์ง ํท๊ฐ๋ฆด ๋?
ํน๋ณํ ๊ฒฝ์ฐ ์๋๋ฉด ๋๋ถ๋ถ false๋ก ์จ์!
์บก์ฒ๋ง(true)์ ์ด๋ฒคํธ ์ฐ์ ์ ์ด๊ฐ ํ์ํ ๋๋ง ์จ์.
๐ฏ ์ ๋ฆฌ ํ ์ค ์์ฝ
true๋ ์บก์ฒ๋ง, false๋ ๋ฒ๋ธ๋ง์ด์์!
์ด๋ฒคํธ๊ฐ ๋ด๋ ค๊ฐ ๋ ์คํํ ์ง, ์ฌ๋ผ๊ฐ ๋ ์คํํ ์ง ์ฐจ์ด!
#์๋ฐ์คํฌ๋ฆฝํธ #์ด๋ฒคํธ๋ฆฌ์ค๋ #๋ฒ๋ธ๋ง #์บก์ฒ๋ง #addEventListener #์น๊ฐ๋ฐํ #ํ๋ก ํธ์๋๊ธฐ์ด #๊ฐ๋ฐ๊ณต๋ถ #์ฝ๋ฉ๊ธฐ์ด #JS์ด๋ฒคํธ