๐ฅ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง
๋ฒ๋ธ๋ง์ ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด, ๊ทธ ์์์ ๋ถ๋ชจ ์์์ ์ด๋ฒคํธ๋ ๊ฐ์ด ๋ฐ์๋๋ ์ด๋ฒคํธ ์ ํ๋ฅผ ๋งํ๋ค. ์ด๋ฒคํธ๊ฐ ์ ์ผ ๊น์ ๊ณณ์ ์๋ ์์์์ ์์ํด ๋ถ๋ชจ ์์๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ๋ฐ์ํ๋ ๋ชจ์์ด ๋ง์น ๋ฌผ์ ๊ฑฐํ(bubble)๊ณผ ๋ฎ์๊ธฐ ๋๋ฌธ์ ๋ช ๋ช ์ง์ด์ก๋ค.
๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ๋ธ๋ง ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ค.\
// false ์๋ต ๊ฐ๋ฅ
element.addEventListener('click', (e) => { ... }, false);
์๋ฐ์คํฌ๋ฆฝํธ addEventListener() ํจ์๋ก ์์์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ๋ธ๋ง ์ ํ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ๊ฐ ํ๋ฅด๊ฒ ๋์ด, ๋ง์ผ ์์ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ถ๋ชจ ์์๋ ๋ฒ๋ธ๋ง ํตํด ์ด๋ฒคํธ๊ฐ ์ ํ๋์ด ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋๊ฒ ๋๋ค.
*๊ฑฐ์ ๋ชจ๋ ์ด๋ฒคํธ๋ ๋ฒ๋ธ๋ง์ด ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ๋ค๋ง focus ์ด๋ฒคํธ์ ๊ฐ์ด ๋ฒ๋ธ๋ง ๋์ง ์๋ ์ด๋ฒคํธ๋ ์กด์ฌํ๊ธฐ๋ ํ๋ค.
๋ฒ๋ธ๋ง์ ์์ชฝ์์ ๋ฐ๊นฅ์ชฝ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ ํ ๋๋ ํ๋ฆ์ด๋ค.
๐ฅ ์ด๋ฒคํธ ์บก์ฒ๋ง
์บก์ฒ๋ง์ ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด, ๊ทธ ์์์ ์์ ์์์ ์ด๋ฒคํธ๋ ๊ฐ์ด ๋ฐ์๋๋ ์ด๋ฒคํธ ์ ํ๋ฅผ ๋งํ๋ค. ํ๋ง๋๋ก ๋ฒ๋ธ๋ง ๋ฐ๋๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ค๋ง, ์ค๋ฌด์์ ์์ฃผ ์ฐ์ด์ง๋ ์์ง๋ง ๊ฐ๋ ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ์์ด ์์๋ณผ ํ์๊ฐ ์๋ค.
๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ์ ํ ๋ฐฉ์์ ๋ฒ๋ธ๋ง์ด ๊ธฐ๋ณธ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์บก์ฒ๋ง์ผ๋ก ์ค์ ํ๊ธฐ ์ํด์ ๋ณ๋์ ์ต์ ์ ํจ์์ ์ฃผ์ด์ผ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ addEventListener() ํจ์์ 3๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก true ๊ฐ์ ์ฃผ๋ฉด ์ด ์ด๋ฒคํธ ํ๊ฒ์ ์บก์ฒ๋ง์ ํตํด ์ด๋ฒคํธ๋ฅผ ์ ํ๋ฐ์ ํธ์ถ๋๊ฒ ๋๋ค.
element.addEventListener('click', (e) => { ... }, true);
element.addEventListener('click', (e) => { ... }, {capture: true});
์ด๋ ๊ฒ ์ต์ ์ค์ ์ ํตํด ๋ฒ๋ธ๋ง or ์บก์ฒ๋ง ์ด๋ฒคํธ ์ ํ ๋์์ผ๋ก ๋ฑ๋กํ๋ ์ด์ ๋, ๋ธ๋ผ์ฐ์ ๋ ์บก์ณ๋ง์ผ๋ก ํ์ํ๊ณ ๋ฒ๋ธ๋ง์ผ๋ก ๋์์ค๋๋ฐ ๊ฐ๋ค๊ฐ ๋์์ค๋ ๊ณผ์ ์์ ์ด๋ฒคํธ๊ฐ ๋๊ฐ์ด ๋๋ฒ ์คํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์บก์ฒ๋ง์ ๋ฐ๋๋ก ๋ฐ๊นฅ์ชฝ์์ ์์ชฝ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ ํ ๋๋ ํ๋ฆ์ด๋ค.
'Elice > Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript / React] (1) | 2024.03.28 |
---|---|
[JavaScript] event.target๊ณผ event.currentTarget์ ์ฐจ์ด์ (0) | 2024.03.28 |
[JavaScript] Script ํ๊ทธ์ defer, async (0) | 2024.03.21 |
[JavaScript] ์ฌ๊ท(Recursive)์ ์คํ(Call Stack)+๋ฐ๋ณต๋ฌธ๊ณผ ์ฑ๋ฅ ๋น๊ต (0) | 2024.03.21 |
[JavaScript] DOM (0) | 2024.03.21 |