JavaScript์์ ์์ฃผ ์ฌ์ฉ๋์ง๋ง ์ข ์ข ํผ๋๋๋ ๋ ๊ฐ์ง ๋ฉ์๋์ธ Event.stopPropagation()๊ณผ Event.preventDefault()์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
Event.stopPropagation()
`stopPropagation()` ๋ฉ์๋๋ ์ด๋ฒคํธ์ ๋ฒ๋ธ๋ง์ ์ค์ง์ํจ๋ค.
element.addEventListener('click', function(event) {
event.stopPropagation();
// ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ก์ง
});
์ฃผ์ ํน์ง )
- ์ด๋ฒคํธ๊ฐ ์์ ์์๋ก ์ ํ๋๋ ๊ฒ์ ๋ง๋๋ค.
- ์ค์ฒฉ๋ ์์์์ ํน์ ์ด๋ฒคํธ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
์ฌ์ฉ ์์ )
์ค์ฒฉ๋ div์์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ํด๋น div์์๋ง ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด:
innerDiv.addEventListener('click', function(event) {
event.stopPropagation();
console.log('Inner div clicked!');
});
outerDiv.addEventListener('click', function() {
console.log('Outer div clicked!'); // ์ด ์ฝ๋๋ ์คํ๋์ง ์๋๋ค.
});
Event.preventDefault()
`preventDefault()` ๋ฉ์๋๋ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ๋ค.
element.addEventListener('click', function(event) {
event.preventDefault();
// ์ปค์คํ
๋ก์ง
});
์ฃผ์ ํน์ง)
- ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋์์ ๋ง๋๋ค.
- ์ด๋ฒคํธ ์์ฒด๋ ๊ณ์ ์ ํ๋๋ค.
์ฌ์ฉ ์์)
๋งํฌ ํด๋ฆญ ์ ํ์ด์ง ์ด๋์ ๋ง๊ณ ์ถ๋ค๋ฉด:
link.addEventListener('click', function(event) {
event.preventDefault();
console.log('๋งํฌ๊ฐ ํด๋ฆญ๋์์ง๋ง, ํ์ด์ง ์ด๋์ ๋ฐ์ํ์ง ์๋๋ค.');
});
์ฌ์ด ๋น์ ๋ก ์ดํดํ๊ธฐ
1. `stopPropagation()`: ๋ฐฉ์๋ฒฝ
- ์ด๋ฒคํธ(์๋ฆฌ)๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ํผ์ ธ๋๊ฐ๋ ๊ฒ์ ๋ง๋๋ค.
2. `preventDefault()`: ์๋์ฐจ ๋ธ๋ ์ดํฌ
- ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์(์๋์ฐจ์ ์์ง์)์ ๋ฉ์ถ๋ค.
`stopPropagation()`๊ณผ `preventDefault()`๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ํ ๋ฉ์๋๋ก, ์ํฉ์ ๋ฐ๋ผ ๋ ๋ค ์ฌ์ฉํ ์๋ ์๋ค. ์ด ๋ ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ดํดํ๊ณ ์ ์ ํ ํ์ฉํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ง์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ํ ์ ์์๊ฒ ๊ฐ๋ค.
๐ธ ์ถ์ฒ ๐ธ
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ JS ] e.stopPropagation ๊ณผ e.preventDefault ์ฐจ์ด ์๊ณ ๋์ด๊ฐ๊ธฐ (0) | 2024.09.08 |
---|---|
[ JS ] Promise VS async await ๋น๊ต (0) | 2024.08.25 |
[ TypeScript ] ํ์ ์ ์ํ interface ์ ํํธ ์ฃผ์ ๋ฌ๊ธฐ. (0) | 2023.06.30 |
[TS] ํ๋ก์ ํธ์ tsconfig ์ค์ ํ๊ธฐ. (0) | 2023.05.28 |
[ JavaScript ] async await ๋ฌธ๋ฒ (0) | 2022.12.04 |