2025. 9. 23. 19:03ใFront-end/JavaScript

์ด๊ฑด ๋จธ๋ฉ์ด๋ ๋ค๋์ด์ธ๋ฐ, ์ํํ ์ ๋์ค๋ 200g์ ํน์ ๋ถ์๊ฐ '๋ฒ๋ธ๋ฆฌ ๋ฑ์ด'์ด๋ค.
ํฌํํ ํ ์ผ์ฃผ์ผ ๋ค์ ๋ง์ด ์ ์ ์ ๋ฌํ์ง๋ง ๋์์ ์ผ์ฃผ์ผ์ด ์ง๋๋ฉด ๋ฒ๋ธ์ด ๋์ด ์ฌ๋ผ์ง๋ค. (๊ทธ๋์ ๋จธ๋ฉ์ด๋ ๋ค๋์ด์ธ๊ฐ..)
๊ตญ์ ๋ฒ์์ ํต๊ณผ ์ํค๊ธฐ ์ํด ๋ค๋์ด ๋ฑ์ด ์ข์ํ๋ ๋ํต๋ น์๊ฒ ๋ด๋์ ์๋ฆฌ ์ฌ๋ฃ๋ก ์ฌ์ฉ๋๋ค.
๊ทธ๋ฅ ๋ฒ๋ธ๋ง์ ๋ณด๋๊น ์๊ฐ๋ฌ๋ค. ์ ๋ง ๋ง์๊ฒ ์๊ฒผ๋ค. ํ ๋ฆฌ์ฝ 18ํ์ฏค์ ๋์จ๋ค.
๋ชฉ์ฐจ
1. ๋ฒ๋ธ๋ง
2. ์บก์ฒ๋ง
1. ๋ฒ๋ธ๋ง
ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด,
1. ์ด ์์์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํ๊ณ ,
2. ์ด์ด์ ๋ถ๋ชจ ์์์ ํธ๋ค๋ฌ๊ฐ ๋์ํ๋ค.
๊ฐ์ฅ ์ต์๋จ์ ์กฐ์ ์์๋ฅผ ๋ง๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ, ์์ ๊ฐ๊ฐ์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํ๋ค.
์ด๋ ๊ฒ ์ ์ผ ๊น์ ๊ณณ์ ์๋ ์์์์ ์์ํด ๋ถ๋ชจ ์์๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ํธ๋ค๋ฌ๊ฐ ๋์ํ๋ ํ๋ฆ์
์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.

<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form onclick="alert('form')>FORM
<div onclick="alert('div')">DIV
<p onclick="alert('p')>P</p>
</div>
</form>

์ ์์๋ form - div - p ๋ก ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ ์์์ onclick์ผ๋ก ํธ๋ค๋ฌ๊ฐ ํ ๋น๋์ด ์๋ค.
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ํด๋ฆญํ ์์๋ถํฐ ์์ ์์๋ก ์์๋๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๋ค.
1. event.target
event.target์ ์ค์ ์ด๋ฒคํธ๊ฐ ์์๋ ํ๊ฒ ์์์ด๋ค.
// script.js
form.onclick = function(event) {
setTimeout(() => {
alert(`target: ${event.target.tagName}, this: ${this.tagName}`);
}, 0);
};
//index.html
<!DOCTYPE HTML>
<html>
<head>..</head>
<body>
<form id="form">FORM
<div>DIV
<p>P</p>
</div>
</form>
<script src="script.js"></script>
</body>
</html>
์ฌ๊ธฐ์ CSS๊น์ง ์์ฑํด์ form, div, p ์์ญ์ ๋๋๊ณ ๊ฐ ์์ญ์ ํด๋ฆญํ๋ฉด
- P ํด๋ฆญ : target: P, this: FORM
- DIV ํด๋ฆญ : target: DIV, this: FORM
- FORM ํด๋ฆญ : target: FORM, this: FORM
์ด๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
2. ๋ฒ๋ธ๋ง ์ค๋จํ๊ธฐ
๋ฒ๋ธ๋ง์ ๊ผญ ๋ฉ์ถฐ์ผ ํ๋ ์ํฉ์ด ์๋๋ฉด ์ค๋จํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ๋ง์์ผ ํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค.
ํ์ง๋ง ์ด๋ฒคํธ ๊ฐ์ฒด์ ๋ฉ์๋ event.stopPropagation()์ ์ฌ์ฉํด์ ๋ฒ๋ธ๋ง์ ์ค๋จํ ์ ์๋ค.
ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ํ, ๋ฒ๋ธ๋ง์ ์ค๋จํ๋ค.
<body onclick="alert(`๋ฒ๋ธ๋ง ๋ชป์ด`)"> // alert๊ฐ ๋จ์ง ์๋๋ค
<button onclick="event.stopPropagation()">ํด๋ฆญ</button>
</body>
2. ์บก์ฒ๋ง
์บก์ฒ๋ง์ ์ค์ ์ฝ๋์์ ์์ฃผ ์ฐ์ด์ง๋ ์์ผ๋, ์ข ์ข ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์บก์ฒ๋ง์ ์ด๋ฒคํธ๊ฐ ํ์ ์์๋ก ์ ํ๋๋ ํ๋ฆ์ด๋ค.
ํ์ค DOM ์ด๋ฒคํธ์์ ์ ์ํ ์ด๋ฒคํธ ํ๋ฆ์ 3๊ฐ์ง ๋จ๊ณ๊ฐ ์๋ค.
1. ์บก์ฒ๋ง ๋จ๊ณ : ์ด๋ฒคํธ๊ฐ ํ์ ์์๋ก ์ ํ๋๋ ๋จ๊ณ
2. ํ๊น ๋จ๊ณ : ์ด๋ฒคํธ๊ฐ ์ค์ ํ๊น ์์์ ์ ๋ฌ๋๋ ๋จ๊ณ
3. ๋ฒ๋ธ๋ง ๋จ๊ณ : ์ด๋ฒคํธ๊ฐ ์์ ์์๋ก ์ ํ๋๋ ๋จ๊ณ
<!DOCTYPE HTML>
<html>
<head> .. </head>
<body>
<div>
<table>
<tbody>
<tr>
<td>..</td>
<td>..</td>
....
์ด๋ ๊ฒ ์ฝ๋๊ฐ ์์ฑ๋์ด ์์ ๋ <td>๋ฅผ ํด๋ฆญํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ฉด ๋์์ ํ๋ฆ์ ์๋์ ๊ฐ๋ค.
1. ์ต์์ ์กฐ์์์ ์๋๋ก ์ด๋ฒคํธ ์ ํ (์บก์ฒ๋ง) : window - document - html - body - table ...
2. ์ด๋ฒคํธ๊ฐ ํ๊น ์์์ ๋์ฐฉํ์ฌ ์คํ๋จ (ํ๊น)
3. ๋ค์ ์๋ก ์ ํ๋จ (๋ฒ๋ธ๋ง)
์บก์ฒ๋ง ๋จ๊ณ์์ ์ด๋ฒคํธ๋ฅผ ์ก์๋ด๊ธฐ ์ํด์๋
addEventListener์ capture ์ต์ ์ true๋ก ์ค์ ํ๋ฉด ๋๋ค.
elem.addEventListener(..., {capture: true});
// or
elem.addEventListener(..., true);
์ฐธ๊ณ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [WIP]๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๋์ (0) | 2025.09.23 |
|---|---|
| [WIP]์ด๋ฒคํธ ์์ : ์บก์ฒ๋ง๊ณผ ๋ฒ๋ธ๋ง ํ์ฉํ๊ธฐ (1) | 2025.09.23 |
| ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ (0) | 2025.09.23 |
| ๋ธ๋ผ์ฐ์ ์ฐฝ ์ฌ์ด์ฆ์ ์คํฌ๋กค ์ ๋ณด ์ป๊ธฐ (1) | 2025.09.22 |
| ๋ฉ์๋๋ก DOM ์กฐ์ํด์ ๋ฌธ์ ์์ ํ๊ธฐ (0) | 2025.09.22 |
GitHub