์ด์ ๋จ๊ณ์์ stopPropagation()๋ฑ์ด ํธ์ถ๋๋ ๊ฒฝ์ฐ ์ดํ์ ์ด๋ฒคํธ ๋จ๊ณ๋ฅผ ์๋ต๋๋ค.
1) ์บก์ณ๋ง ๋จ๊ณ : window ๊ฐ์ฒด๋ก๋ถํฐ ๋์์ ๋ถ๋ชจ๊น์ง ์์๋๋ก ์ ๋ฌ๋๋ ๋จ๊ณ
2) ์ด๋ฒคํธ ๋์ ๋จ๊ณ: ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ์ด๋ฒคํธ ๋์์ ๋๋ฌํ๋ ๋จ๊ณ, ์ด ๋จ๊ณ์์ ์ด๋ฒคํธ๊ฐ ๋ฒ๋ธ๋ง ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๋๋ค๊ณ ๋ช
์ํ๋ฉด, ์ด๋ฒคํธ ๊ฐ์ฒด๋ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ต
3) ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋จ๊ณ: ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ๋์์ ๋ถ๋ชจ๋ก๋ถํฐ window ๊ฐ์ฒด๊น์ง ์ญ์์ผ๋ก ์ ํ
1) ํน์ DOM์์ ์ด๋ฒคํธ ๋ฐ์
2) ํด๋น DOM์ dispatchEvent()๋ผ๋ ํจ์๋ฅผ ํตํด์ ์ด๋ฒคํธ ์ ๋ฌ
3) ์ด๋ฒคํธ ์ ๋ฌ์ propagation path(์ ํ๊ฒฝ๋ก)์ ๋ฐ๋ผ์ ์ํ๋จ
4) ์ ๋ฌ๋จ๊ณ(1) ์งํ: ์ด๋ฒคํธ ์บก์ณ๋ง
5) ์ ๋ฌ๋จ๊ณ(2) ์งํ: ์ด๋ฒคํธ ๋์์ ํด๋นํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํธ์ถ
6) ์ ๋ฌ๋จ๊ณ(3) ์งํ: ์ด๋ฒคํธ ๋ฒ๋ธ๋ง
์ด๋ฒคํธ ํจ์์ ๊ฐ๋จํ ์์ ๋ ์๋์ ๊ฐ๋ค. (์ถ์ฒ:MDN)
"adddEventListener('์ด๋ฒคํธํ์
', ํจ์๋ช
, false)" ์ด๋ ๊ฒ ์ฐ๋๋ฐ!
๋ง์ง๋ง false์ ์ ์ฒด๋ ๋ฌด์์ผ๊น?
MDN์์ addEventListener์ ๋ฌธ๋ฒ์ ์ดํด๋ณด๋ ์๋์ ๊ฐ๋ค.
์ ๋ชจ๋ฅด๊ฒ ๋ค.........
"false"์ ์ ์ฒด๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด ์ฐพ์ ์ฒซ๋ฒ์งธ ์๋ฃ!
"์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฌ์ฉ ์์ "
clickNode.addEventListener('click', handleClick, false); ์์ค์์ ์ธ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ false ์ด๋ฉด ๋ฒ๋ธ๋ง์ ๋ฆฌ์ค๋๊ฐ ์ฒ๋ฆฌํ๊ณ true์ด๋ฉด ์บก์ณ๋ง์ ๋ฆฌ์ค๋๊ฐ ์ฒ๋ฆฌํ๋ค. ์ ํ(propagation)์ ๋ํด ๋ฒ๋ธ๋ง ๋ง๊ธฐ๋ event.stopPropagation() ํธ์ถํ๋ค. ํ๊ทธ์ ํ ๋น๋ ์ด๋ฒคํธ๋ฅผ ๋ง๊ธฐ์ํด ์๋ก ํ๊ทธ์ ํ๋ฉด ์ด๋์ ๋ง๊ธฐ์ํด event.preventDefault() ํธ์ถํ๋ค.
(์ถ์ฒ: https://mobicon.tistory.com/474)
๋ฒ๋ธ๋ง๊ณผ ์บก์ณ๋ง์ ํค์๋๋ก ์ฐพ์ 2๋ฒ์งธ ์๋ฃ!
๋ธ๋ผ์ฐ์ ์์ ์ด๋ป๊ฒ ํน์ ํ๋ฉด ์์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋์ง ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฅธ ํ๋ฉด ์์์ ์ ํํ๋์ง ๊ฐ์ด ์์๋ณด๊ฒ ์ต๋๋ค.
(์ถ์ฒ: https://joshua1988.github.io/web-development/javascript/event-propagation-delegation/)
2๋ฒ์งธ ์๋ฃ๋ฅผ ํตํด์
์๊ฒ๋ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด๊ฒ ๋ค.
๋ฆฌ์กํธ๋ ์๋์ 3๊ฐ์ง ๋ฐฉ์ ์ค ์ด๋ค ๋ฐฉ์์ผ๊น? ์ด๋ฒคํธ ์์์ผ๊น?
ํน์ ํ๋ฉด ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ๊ฐ ๋ ์์์ ํ๋ฉด ์์๋ค๋ก ์ ๋ฌ๋์ด ๊ฐ๋ ํน์ฑ
์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์งํ๋๋ ์ด๋ฒคํธ ์ ํ ๋ฐฉ์
๊ทธ๋ฅ ์ํ๋ ํ๋ฉด ์์์ ์ด๋ฒคํธ๋ง ์ ๊ฒฝ ์ฐ๊ณ ์ถ๋ค
ํด๋น ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๊ฒ์ ๋ง์
ํ์ ์์์ ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ถ์ด์ง ์๊ณ ์์ ์์์์ ํ์ ์์์ ์ด๋ฒคํธ๋ค์ ์ ์ดํ๋ ๋ฐฉ์