html๊ณผ js๋ก ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด ์์๋ง๋ค ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ผ์ด ๋ง์ต๋๋ค.
๊ทธ๋ฌ๋ค๋ณด๋ฉด ๊ตฌ์กฐ๊ฐ ํ์ sibling๊ฐ ์๋ ๋ถ๋ชจ-์์ ๊ด๊ณ์ ์์๊ฐ ๋ ์๋ฐ์ ์๋๋ฐ, ์ด๋ ์์ ์์๋ฅผ ๋ง๋ค๋ฉด ๋ถ๋ชจ์ ์ด๋ฒคํธ๋ ํจ๊ป ์ ์ฉ๋๊ณค ํฉ๋๋ค. ์์์ ์ด๋ฒคํธ๋ฅผ ํ๋๋ง ์คํํ๊ณ ์ถ์๋ฐ, ๋ถ๋ชจ์ ์ด๋ฒคํธ๊น์ง ๊ฐ์ด ํ ๋ฒ์ ์คํ๋์ด ๋ฒ๋ฆฌ๋ ๊ณจ์น๊ฐ ์ํ๋ฐ์.
ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ์์ ์์์์ ๋ถ๋ชจ์ ์ด๋ฒคํธ๋ฅผ removeEventListener ํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๊ณ ๋ฏผํ์ค ์ ์๋๋ฐ, ์ด๋ ์์ ์์์์ ๋ณธ์ธ์ ์ด๋ฒคํธ๋ง ํธ์ถํ๊ณ ๋ถ๋ชจ ์ด๋ฒคํธ ํธ์ถ์ ์ ๊ฑฐ, ๋ง๋ ๋ฐฉ๋ฒ์ ๊ณต์ ํด๋๋ฆฝ๋๋ค.
JS onclick ์ด๋ฒคํธ ํ๋๋ง, ๋ถ๋ชจ ์ด๋ฒคํธ ์ ๊ฑฐ
์ด๋ฒ ์์๋ onclick ์ด๋ฒคํธ๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ๋ถ๋ชจ ์์ ์์ ์์ ์์๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ์๋ฉด ๋๊ณ , html ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๊ฒ ์ต๋๋ค.
<div id="parent" onclick="parentEvent(e)">
<div id="child" onclick="childEvent(e)"></div>
</div>
์ฌ๊ธฐ์ div๊ฐ span์ด๋ , p์ด๋ , button์ด๋ ์๊ด ์์ต๋๋ค. ์ด๋ฒคํธ๋ฅผ ๋ณธ์ธ ์ด๋ฒคํธ๋ง ์ ์ฉํด๋ณด๋๋ก ํ๊ธฐ ์ํด์๋ ๋ค์์ ์ดํดํ์ ์ผ ํฉ๋๋ค.
์ด๋ฒคํธ ๋ฒ๋ธ๋ง
์์ ๊ฐ์ ๊ตฌ์กฐ์์ child ์์๋ฅผ ํด๋ฆญํ์ ๋ ์ด ๋๊ฐ์ง ์ด๋ฒคํธ๊ฐ ์คํ๋ฉ๋๋ค. ๋ฐ๋ก childEvent()ํจ์์ parentEvent()ํจ์์ ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ํ์์ ๋๋ค. ์์ ์์๋ฅผ ํด๋ฆญํ๋ฉด, ๊ทธ๊ฒ์ ํฌํจํ๊ณ ์๋ ๋ถ๋ชจ ์์๋ ํด๋ฆญํ ์๋ฐ์ ์๋ ๊ฒ์ ๋๋ค.
์คํ์์๋ ์์->๋ถ๋ชจ ์ฐจ๋ก๋ก ์คํ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์์์์ ๋ถ๋ชจ๋ก ๊ฐ๋ ์ด๋ฒคํธ๋ฅผ ๋ง์์ค๋ค๋ฉด? ๋ณธ์ธ์ ํจ์ ํ๋๋ง ํธ์ถํ ์ ์๊ฒ ๋๊ฒ ์ฃ .
์ด๋ป๊ฒ ํ๋ฉด ๋๋์ง ๋ฐ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
e.stopPropagation()์ ํ์ฉ ์์
๊ทธ๋์ ์ฌ์ฉํ๋ ํจ์๊ฐ ๋ฐ๋ก stopPropagation()์ ๋๋ค.
propagation์ด๋ผ๋ ๋จ์ด์ ๋ป ์์ฒด๊ฐ "๋ฒ์"์ธ๋ฐ, ์ด๋ฅผ ๋ง๊ฒ ๋ค๋ ๊ฒ์ผ๋ก ์ด๋ฒคํธ์ ์ ํ, ์ฆ ๋ค์ ์ด๋ฒคํธ๋ก์ ์คํ์ ๋ง๋๋ค๋ ๋ป์ผ๋ก ์ดํดํ์๋ฉด ์ฝ์ต๋๋ค.
์ด๋ฒคํธ ํ๋ผ๋ฏธํฐ ์์ ๋ด์ฅ๋์ด์์ด ํธํ๊ฒ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค. html์์ onclick์ ์์ฑํ ๋ ๊ผญ e(์ด๋ฆ์ ์๊ด์์ต๋๋ค, event๋ก ์์ฑํ์ ๋ ๋ฌด๊ด)๋ฅผ ๋ฃ์ด์ฃผ์ธ์.
ํ์ฉ ์์๋ ๋ค์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
function childEvent(e){
e.stopPropagation();
cosole.log("์ด๋ถ๋ถ์ ์์ ์์๋ฅผ ํด๋ฆญํ์ ๋ ํ๊ณ ์ถ์ ํจ์ ์์ฑ");
}
๋ถ๋ชจ๋ก์ ์ด๋ฒคํธ ์ ํ๋ฅผ ๋ง๊ณ ์ถ์ ๋จ๊ณ์์ ์ฌ์ฉํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์๋ฅผ๋ค์ด 1->2->3 ์ด ์ธ ๋จ๊ณ์ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , 2๋ฒ์งธ ์์์ ์ด๋ฒคํธ ํจ์์์ ํ์ฉํ๋ฉด 3์ด๋ฒคํธ->2์ด๋ฒคํธ๊น์ง๋ง ์คํ๋๋ ๊ฒ์ ๋๋ค.
์ด์ ์ด๋ฒคํธ ์์ ์ ๊ฑฐ, ์์ ์ด๋ฒคํธ๋ง ์คํํ๊ธฐ, ๋ถ๋ชจ์ ์ด๋ฒคํธ ์คํ ๋ง๊ธฐ, ๋ถ๋ชจ element removeEventListner ํ๋ ๋ฐฉ๋ฒ, ์ฆ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ํ์ ์ ๊ฑฐ ๋ฐฉ๋ฒ์ธ stopPropagation()์ ๋ํด ์ค๋ช ๋๋ ธ์ต๋๋ค.
์ฃผ์ํด์ผํ ์ ์, ๋ค๋ฅธ ์ด๋ฒคํธ๊น์ง๋ ๋ง์๋ฒ๋ฆด ์ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ํธ์ถ ๊ตฌ์กฐ๋ฅผ ์ ์๊ฐํ์ฌ ์์ฑํ์๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค๋ ๊ฒ์ ๋๋ค.
๋๊ธ