์ด๋ฒคํธ ๊ฐ์ฒด
์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋์ ์ธ ๊ธฐ๋ฅ์ ์ํด ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๊ณ ์ ํ ๋๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง,
ํํ๋ค addEventListener()๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณค ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ ์ด๋ฒคํธ ๊ฐ์ฒด event object๋ฅผ ๋ง๋ ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์งํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ ๊ฒ์ผ๊น?
์ด๋ฐ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํด์ฃผ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง ํ๋ ํน์ฑ์ด ์๋ค.
๋ฐ๋ก ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ์ด๋ฒคํธ ์บก์ณ๋ง, ๋ ๊ฐ์ง ๋ฐฉ์์ด๋ค.
์ด๋ฒคํธ ๋ฒ๋ธ๋ง Event Bubbling
์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋น๋๋ฐฉ์ธ์ด ์๋์์ ์ฌ๋ผ์ค๋ ๊ฒ๊ณผ ๋น์ทํ๊ฒ ์๊ฐํ๋ฉด ์ข ๋ ์์ํ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ๊ฐ ๋ ์์์ ์์๋ค๋ก ์ ๋ฌ๋๋ ํน์ฑ์ ๋งํ๋ค.
Article๋ถํฐ Button๊น์ง ์ค์ฒฉ๋์ด์๋ ์์๊ฐ ์๊ณ ๊ฐ ์์๋ณ๋ก ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ฐ๊ณ ์๋ค๊ณ ํ์.
๋จ์ง ๋ฒํผ์ ๋๋ ์ ๋ฟ์ธ๋ฐ ๊ฐ์ฅ ์์ ์์์ธ article๊น์ง ์์ฐจ์ ์ผ๋ก ์ด๋ฒคํธ๊ฐ ๋ชจ๋ ์งํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ธ๋ผ์ฐ์ ๋ ํน์ ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ต์์์ ์์๊น์ง ์ด๋ฒคํธ๋ฅผ ์ ํ์ํค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
์์ ๊ฐ์ด ํ์์์ ์์ ์์๋ก ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๋ฐฉ์์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋ผ๊ณ ํ๋ค.
์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ stopProagation() ์ด๋ผ๋ ๋ฉ์๋๋ก ์ค์ง์ํฌ ์ ์๋ค.
division.addEventListener('click', () => {
event.stopPropagation(); // ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ค์ง์ํด
console.log('division');
});
์ด๋ฒคํธ ์บก์ณ๋ง Event Capturing
์ด๋ฒคํธ ์บก์ณ๋ง์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ๋ฐ๋๋ก ์์์์ ํ์์์๋ก ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๋ฐฉ์์ด๋ค.
์ต์์ ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ์ ์์๋ก ๋ด๋ ค๊ฐ๋ ๊ฒ์ด๋ค.
๋๊ฐ์ด button์ ๋๋ ์์๋ article๋ถํฐ button์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๊ฒ์ด๋ค.
์ด๋ฒคํธ ์บก์ณ๋ง์ addEventListener() ๋ฉ์๋์์ useCapture ๋ผ๋ ์ต์ ์ ์ค์ ํ์ฌ ๋์์ํฌ ์ ์๋ค.
๊ธฐ๋ณธ๊ฐ์ false์ธ๋ฐ, true๋ก ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ ํด๋น ์์์ ์ด๋ฒคํธ๊ฐ ๋จผ์ ๋ฐ๋๋๋ค.
์๋์ ๊ฐ์ด true๋ก๋ง ์์ฑํด์ค ์๋ ์๊ณ ,
article.addEventListener(
'click',
() => {
console.log('article');
},
true
);
๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด์ ์ต์ ์ ์ง์ ํด์ ์ฌ์ฉํ ์๋ ์๋ค. {capture: true}๋ฅผ ์ถ์ฝํ ๊ฒ์ด ์์ true๋ค.
container.addEventListener(
'click',
(event) => {
event.target.style.background = 'blue';
},
{
capture: true
}
);
์ด๋ฐ ์ด๋ฒคํธ ์ ํ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์์ํ๊ฒ ๋๋๋ฐ, ๊ทธ ๋ถ๋ถ์ ๋ํด์๋ ์ถํ ์ถ๊ฐํ๋๋ก ํ๊ฒ ๋ค. ๐
์ถ๊ฐ๋ก ์ด๋ฒคํธ ์ ํ ๋ฐฉ์์ ์ฌ๋ฐ๊ฒ ํ์ ํ ์ ์๋ ์ฌ์ดํธ๋ฅผ ์๊ฒ๋์ด ์๊ฐํ๋ค.
'๐ Studying > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] classList ํ๋กํผํฐ (0) | 2022.06.06 |
---|---|
JavaScript 30 Days Challenge - Clock (0) | 2022.05.26 |
[JavaScript] ํ๋ก๋ฏธ์ค์ ๋ํด ์์๋ณด์ Promise (3) | 2022.04.27 |
[JavaScript] Fetch API ์ฌ์ฉํด๋ณด๊ธฐ (JSONplaceholder) (3) | 2022.04.26 |
[JavaScript] var์ ๋ฌธ์ ์ (var, let, const) (0) | 2022.04.24 |
Comment