๐ก addEventListener()๋ฉ์๋
์์์ ๋ฐฐ์ด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ํ ์์์ ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ์ฐ๊ฒฐํ ์ ์์์ต๋๋ค.
ํ์ง๋ง ๊ฒ์์ฐฝ์ ๋๋ณด๊ธฐ ๋ฒํผ ์ฒ๋ผ click๊ณผ enter ์ด๋ฒคํธ๋ฅผ ํจ๊ป ์ฐ๊ฒฐํด์ผํ ๊ฒฝ์ฐ
addEventListener()๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ, ํ๋์ ์์์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
[๊ธฐ๋ณธํ] ์์.addEventListener('์ด๋ฒคํธ๋ช ', ํจ์(ํธ๋ค๋ฌ), ์บก์ณ ์ฌ๋ถ); - ์ด๋ฒคํธ๋ช : ์ด๋ฒคํธ์ ์ ํ์ ์ง์ ํฉ๋๋ค. ๋จ, click์ด๋ keydown์ฒ๋ผ on์ด๋ผ๋ ํค์๋๋ ์ฐ์ง ์์ต๋๋ค. - ํจ์ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์คํํ ๋ช ๋ น์ด๋ ํจ์๋ฅผ ์ ๋ ฅํฉ๋๋ค. ์ฌ๊ธฐ์์ ํจ์๋ฅผ ์ ์ํ ๋์๋ event ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค. ๋งค๊ฐ๋ณ์ ์๋ฆฌ์ ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. - ์บก์ณ ์ฌ๋ถ : ์ด๋ฒคํธ๋ฅผ ์บก์ณํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ false์ด๊ณ true๋ false ์ค ์ ํํ ์ ์์ต๋๋ค. true๋ฉด ์บก์ณ๋ง, false๋ฉด ๋ฒ๋ธ๋งํ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๋ฒคํธ์ ์บก์ณ๋ง์ DOM์ ๋ถ๋ชจ๋ ธ๋์์ ์์๋ ธ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด๊ณ , ๋ฒ๋ธ๋ง์ DOM์ ์์๋ ธ๋์์ ๋ถ๋ชจ๋ ธ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ๋ง์ฝ ๋ฒ๋ธ๋งํ ๊ฒฝ์ฐ ์ด ์๋ฆฌ๋ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ ๋ฒ๋ธ๋ง๊ณผ ์บก์ณ๋ง
๋ฒ๋ธ๋ง์ด๋ DOM์ ์์๋ ธ๋์์ ๋ถ๋ชจ๋ ธ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋งํ๋ฉฐ,
๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ด๊ฐ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๋จ, ๋ชจ๋ ์ด๋ฒคํธ๊ฐ ์ ๋ถ ๋ฒ๋ธ๋ง๋๋ ๊ฒ์ ์๋๋๋ค.
์บก์ณ๋ง์ ๋ฐ๋๋ก DOM์ ๋ถ๋ชจ๋ ธ๋์์ ์์๋ ธ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋งํ๋ฉฐ,
๊ธฐ๋ณธ๊ฐ์ false๋ก ์บก์ณ๋ง์ด ๋์ง ์๊ณ ,
addEventListenener์ ๋ง์ง๋ง ์ธ์๊ฐ ์๋ฆฌ์ true๋ฅผ ๋ฃ์์ ๊ฒฝ์ฐ์๋ง ๋ฐ์ํฉ๋๋ค.
๐ฆ ๋ฒ๋ธ๋ง
๋ฒ๋ธ๋ง์ ์๋ฆฌ๋ ์์ฃผ ๊ฐ๋จํฉ๋๋ค.
ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ์ด ์์์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํ๊ณ
์ด์ด์ ๋ถ๋ชจ์์์ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค.
๊ฐ์ฅ ์ต์์์ ์๋ ์กฐ์ ์์๋ฅผ ๋ง๋ ๋๊น์ง์ด ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด์
์์ ๊ฐ๊ฐ์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค.
โญ event.target
๋ถ๋ชจ์์์ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ๊ฐ ์ ํํ ์ด๋์์ ๋ฐ์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฐ์ฅ ์์ชฝ์ ์์๋ target ์์๋ผ๊ณ ๋ถ๋ฅด๊ณ
event.target์ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค.
-
event.target์ this(= event.currentTarget)์ ์๋์ ๊ฐ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
- event.target์ ์ค์ ์ด๋ฒคํธ๊ฐ ์์๋ 'ํ์ผ'์์ ์ ๋๋ค.
๋ฒ๋ธ๋ง์ด ์งํ๋์ด๋ ๋ณํ์ง ์์ต๋๋ค.
- this๋ 'ํ์ฌ ์์', ํ์ฌ ์คํ์ค์ธ ํธ๋ค๋ฌ๊ฐ ํ ๋น๋ ์์๋ฅผ ๋ปํฉ๋๋ค.
โ ๋ฒ๋ธ๋ง ์ค๋จํ๊ธฐ
์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ํ๊ฒ ์ด๋ฒคํธ์์ ์์ํด์ html ์์๋ฅผ ๊ฑฐ์ณ
document๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง ๊ฐ ๋ ธ๋์์ ๋ชจ๋ ๋ฐ์ํฉ๋๋ค.
๋ช๋ช ์ด๋ฒคํธ๋ window ๊ฐ์ฒด๊น์ง ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ ๋ชจ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ํธ๋ค๋ฌ์๊ฒ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ฒ๋ฆฌํ ์ดํ์ ๋ฒ๋ธ๋ง์ ์ค๋จํ๋๋ก ๋ช ๋ นํ ์ ์์ต๋๋ค.
event.stopPropergation()๋งค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
๐ท ์บก์ฒ๋ง
์ด๋ฒคํธ์๋ ๋ฒ๋ธ๋ง ์ด์ธ์๋ ์บก์ฒ๋ง(capturing)์ด๋ผ๋ ํ๋ฆ์ด ์กด์ฌํฉ๋๋ค.
์ค์ ์ฝ๋์์ ์์ฃผ ์ฐ์ด์ง๋ ์์ง๋ง ์ข ์ข ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ์๊น๋๋ค.
ํ์ค DOM ์ด๋ฒคํธ ํ๋ฆ์๋ 3๋จ๊ณ๊ฐ ์์ต๋๋ค.
1. ์บก์ฒ๋ง ๋จ๊ณ = ์ด๋ฒคํธ๊ฐ ํ์์์๋ก ์ ํ๋๋ ๋จ๊ณ
2. ํ์ผ ๋จ๊ณ = ์ด๋ฒคํธ๊ฐ ์ค์ ํ์ผ ์์์ ์ ๋ฌ๋๋ ๋จ๊ณ
3. ๋ฒ๋ธ๋ง ๋จ๊ณ = ์ด๋ฒคํธ๊ฐ ์์ ์์๋ก ์ ํ๋๋ ๋จ๊ณ
์บก์ณ๋ง์ ์ด๋ฒคํธ๋ฆฌ์ค๋์ ๋ง์ง๋ง ์ธ์์๋ฆฌ์ true๋ฅผ ์ค์ ํ๋ฉด ์งํ๋ฉ๋๋ค.
์ด๋ ์ต์์ ์์๋ถํฐ ํ๊ฒ ์์๊น์ง ์์ฐจ์ ์ผ๋ก ์๋๋ก ๋ด๋ ค์ค๋ฉฐ ์ด๋ฒคํธ๋ฅผ ์คํ์ํต๋๋ค.
[๊ธฐ๋ณธํ] ์์.addEventListener('์ด๋ฒคํธ๋ช ', ํจ์, true) ๋๋ ์์.addEventListener('์ด๋ฒคํธ๋ช ', ํจ์, {capture : true})
๐จ๏ธ ์์ผ๋ก ์ง์ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ด๋๋๋ค !
โ๏ธ
์์ผ๋ก๋ ์ด์ฌํ ๊ณต๋ถํด์ ๋ง์ ๋ด์ฉ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค :)