|
| 1 | +๋ธ๋ผ์ฐ์ ๋ ์ฒ๋ฆฌํด์ผ ํ ์ฌ๊ฑด์ด ๋ฐ์ํ๋ฉด ์ด๋ฅผ ๊ฐ์งํด์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ํต๋๋ค. ์ด๋ฌํ ์ด๋ฒคํธ์ ๋์ํ๋ ํจ์๋ฅผ ํตํด ํ๋ก๊ทธ๋๋ฐ์ ์ ์ดํ ์ ์์ฃ . ์ด๋ฒคํธ์ ๋ํด ์์ธํ ์์๋ด
์๋ค. |
| 2 | + |
| 3 | +<br> |
| 4 | + |
| 5 | +## ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ํ๋ก๊ทธ๋๋ฐ |
| 6 | +> ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋๋ ํจ์๋ฅผ ์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler), ์ด๋ฒคํธ ๋ฐ์ ์ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํธ์ถ์ ์์ํ๋ ๊ฒ์ ์ด๋ฒคํธ **ํธ๋ค๋ฌ ๋ฑ๋ก**์ด๋ผ๊ณ ํฉ๋๋ค. |
| 7 | +
|
| 8 | +์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ํน์ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ถ๋ค ๊ฐ์ ํด๋ณผ๊น์? ๋ฌธ์ ๋ `์ธ์ ํธ์ถ์ด ๋๋๊ฐ`์
๋๋ค. ์ฌ์ฉ์๊ฐ ์ธ์ ๋ฒํผ์ ํด๋ฆญํ ์ ์์ผ๋๊น์. ๋คํํ ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์์ ๋ฒํผ ํด๋ฆญ์ **๊ฐ์ง**ํ ์ ์์ผ๋ฉฐ, ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ **๋ฐ์**์ํฌ ์๋ ์์ฃ . ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํน์ ํจ์(์ด๋ฒคํธ ํธ๋ค๋ฌ)๋ฅผ ํธ์ถํ๋๋ก ๋ธ๋ผ์ฐ์ ์๊ฒ **์์**ํ ์๋ ์์ต๋๋ค. |
| 9 | + |
| 10 | +์ด๋ ๊ฒ ์ด๋ฒคํธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์
์ **์ํธ์์ฉ(Interfaction)** ํ ์ ์๋๋ฐ, ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ด ์ด๋ฒคํธ ์ค์ฌ์ผ๋ก ์ ์ด๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ `์ด๋ฒคํธ ๋๋ฆฌ๋ธ ํ๋ก๊ทธ๋๋ฐ(Event-driven Programming)`์ด๋ผ ํฉ๋๋ค. |
| 11 | + |
| 12 | +<br> |
| 13 | + |
| 14 | +## ์ด๋ฒคํธ ํ์
|
| 15 | +> ์ด๋ฒคํธ ํ์
(Event Type)์ ์ด๋ฒคํธ ์ข
๋ฅ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์
๋๋ค. |
| 16 | +
|
| 17 | +์ด๋ฒคํธ ํ์
์ ์ฝ 200์ฌ ๊ฐ์ง๊ฐ ์๋๋ฐ, ์์ธ ๋ชฉ๋ก์ [์ฌ๊ธฐ](https://developer.mozilla.org/ko/docs/Web/Events)์์ ํ์ธํด์ฃผ์ธ์. ํฐ ๋งฅ๋ฝ์ ์ด๋ฒคํธ ์ข
๋ฅ๋ ์๋์ ๊ฐ์ต๋๋ค. |
| 18 | +- ๋ง์ฐ์ค(Mouse) ์ด๋ฒคํธ |
| 19 | +- ํค๋ณด๋(Keyboard) ์ด๋ฒคํธ |
| 20 | +- ํฌ์ปค์ค(Focus) ์ด๋ฒคํธ |
| 21 | +- ํผ(Form) ์ด๋ฒคํธ |
| 22 | +- ๊ฐ ๋ณ๊ฒฝ(Change Value) ์ด๋ฒคํธ |
| 23 | +- DOM ๋ฎคํ
์ด์
(Mutation) ์ด๋ฒคํธ |
| 24 | +- ๋ทฐ(View) ์ด๋ฒคํธ |
| 25 | +- ๋ฆฌ์์ค(Resources) ์ด๋ฒคํธ |
| 26 | + |
| 27 | +<br> |
| 28 | + |
| 29 | +## ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก |
| 30 | +> ์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler ๋๋ Event Listener)๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋ธ๋ผ์ฐ์ ์ ํธ์ถ์ ์์ํ ํจ์์
๋๋ค. |
| 31 | +
|
| 32 | +์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ํด ํธ์ถ๋ ํจ์๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ด๋ฉฐ, ์ด๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์์ต๋๋ค. |
| 33 | + |
| 34 | +<br> |
| 35 | + |
| 36 | +### ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ |
| 37 | +> ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ผ๋ก ํจ์ ํธ์ถ๋ฌธ ๋ฑ์ ๋ฌธ(Statement)์ ํ ๋นํ๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฑ๋ก๋ฉ๋๋ค. |
| 38 | +
|
| 39 | +HTML ์์ ์ค์๋ ์ด๋ฒคํธ์ ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์๋๋ฐ, on ์ ๋์ฌ์ ์ด๋ฒคํธ์ ์ข
๋ฅ๋ฅผ ๋ํ๋ด๋ ์ด๋ฒคํธ ํ์
์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. `onclick`, `onchange`, `onfocus`์ฒ๋ผ ๋ง์ด์ฃ . ์ด๋ฒคํธ ๋ฑ๋ก ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค. |
| 40 | +```html |
| 41 | +<!DOCTYPE html> |
| 42 | +<html lang="en"> |
| 43 | + |
| 44 | +<head> |
| 45 | + <meta charset="UTF-8"> |
| 46 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| 47 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 48 | + <title>Document</title> |
| 49 | +</head> |
| 50 | + |
| 51 | +<body> |
| 52 | + <button onclick="displayAlert('Hi!')">Click to Hi</button> |
| 53 | + <script> |
| 54 | + function displayAlert(greeting) { |
| 55 | + return alert(greeting); |
| 56 | + } |
| 57 | + </script> |
| 58 | +</body> |
| 59 | + |
| 60 | +</html> |
| 61 | +``` |
| 62 | +- ํจ์ ์ฐธ์กฐ๊ฐ ์๋ ํจ์ ํธ์ถ๋ฌธ ๋ฑ์ **๋ฌธ**์ ํ ๋นํฉ๋๋ค. |
| 63 | +- ์ฝ๋ฐฑ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์ ์ฐธ์กฐ๋ฅผ ๋ฑ๋กํด์ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. |
| 64 | +- ๋ง์ฝ ํจ์ ํธ์ถ๋ฌธ์ ๋ฑ๋กํ๋ฉด ๊ทธ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ๋ฑ๋ก๋๋ฏ๋ก, ๊ณ ์ฐจ ํจ์ ํธ์ถ๋ฌธ์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง ํจ์๊ฐ ์๋ ๊ฐ์ ๋ฐํํ๋ ํจ์ ํธ์ถ๋ฌธ์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. |
| 65 | +- **์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ ์๋ฌต์ ์ผ๋ก ์์ฑ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ํจ์ ๋ชธ์ฒด๋ฅผ ์๋ฏธ**ํฉ๋๋ค. |
| 66 | + ```js |
| 67 | + // onclick="displayAlert('Hi!')" ์ดํธ๋ฆฌ๋ทฐํธ๋ |
| 68 | + // ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ํ์ฑ๋์ด ์๋ฌต์ ์ผ๋ก ํจ์๋ฅผ ์์ฑํฉ๋๋ค. |
| 69 | + function onclick(event){ |
| 70 | + displayAlert('Hi'); |
| 71 | + } |
| 72 | + // ๊ทธ ํ onclick ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ํ ๋นํฉ๋๋ค. |
| 73 | + ``` |
| 74 | + |
| 75 | +์ด์ฒ๋ผ ๋์ํ๋ ์ด์ ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ธ์๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด์์
๋๋ค. ํจ์ ์ฐธ์กฐ๋ฅผ ํ ๋นํ๋ค๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ธ์๋ฅผ ์ ๋ฌํ๊ธฐ ๊ณค๋ํด์ง๊ฑฐ๋ ์. |
| 76 | +```html |
| 77 | +// ๋๋ฌด ๊ณค๋ํด์. |
| 78 | +<button onclick="displayAlert"> |
| 79 | + Click to Hi |
| 80 | +</button> |
| 81 | +``` |
| 82 | + |
| 83 | +๋ฐ๋ผ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ผ๋ก ์ฌ๋ฌ ๋ฌธ์ ํ ๋นํ ์ ์์ต๋๋ค. |
| 84 | +```html |
| 85 | +<button onclick="console.log('Hi'); alert('Hi!');"> |
| 86 | + Click to Hi |
| 87 | +</button> |
| 88 | +``` |
| 89 | + |
| 90 | +๊ธฐ๋ณธ์ ์ผ๋ก HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ด์ฌ์ฌ๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ CBD(Component Based Development)์ ๊ฒฝ์ฐ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ด์ฌ์ฌ๊ฐ ๋ถ๋ฆฌ๋์ด์์ง ์๊ณ View๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ก ํ๋จํ๋ฏ๋ก ํผ์ฌํ์ฌ ์ฌ์ฉํฉ๋๋ค. |
| 91 | +```html |
| 92 | +<!-- Angular.js --> |
| 93 | +<button (click)="handleClick($event)"> |
| 94 | + Click |
| 95 | +</button> |
| 96 | +<!-- React.js --> |
| 97 | +<button onClick={handleClick}> |
| 98 | + Click |
| 99 | +</button> |
| 100 | +<!-- Vue.js --> |
| 101 | +<button on:click={handleClick}> |
| 102 | + Click |
| 103 | +</button> |
| 104 | +<!-- Svelte.js --> |
| 105 | +<button v-on:click="handleClick($event)"> |
| 106 | + Click |
| 107 | +</button> |
| 108 | +``` |
| 109 | + |
| 110 | +<br> |
| 111 | + |
| 112 | +### ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ |
| 113 | +> window ๊ฐ์ฒด, Document์ HTMLElement ํ์
์ DOM Node ๊ฐ์ฒด๋ ์ด๋ฒคํธ์ ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ํจ์๋ฅผ ๋ฑ๋กํ๋ฉด ํด๋น ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. |
| 114 | +
|
| 115 | +์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ํค๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก on ์ ๋์ฌ์ ์ด๋ฒคํธ ์ข
๋ฅ๋ฅผ ๋ํ๋ด๋ ์ด๋ฒคํธ ํ์
์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. |
| 116 | +```html |
| 117 | +<!DOCTYPE html> |
| 118 | +<html lang="en"> |
| 119 | + |
| 120 | + <head> |
| 121 | + <meta charset="UTF-8"> |
| 122 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| 123 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 124 | + <title>Document</title> |
| 125 | +</head> |
| 126 | + |
| 127 | +<body> |
| 128 | + <button>Click</button> |
| 129 | + <script> |
| 130 | + const $button = document.querySelector('button'); |
| 131 | + $button.onclick = function () { |
| 132 | + console.log('button click'); |
| 133 | + } |
| 134 | + </script> |
| 135 | +</body> |
| 136 | + |
| 137 | +</html> |
| 138 | +``` |
| 139 | + |
| 140 | +์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ๊ฐ์ฒด์ธ ์ด๋ฒคํธ ํ๊ฒ(Event Target)๊ณผ ์ด๋ฒคํธ ์ข
๋ฅ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ธ ์ด๋ฒคํธ ํ์
(Event Type)์ด ํ์ํฉ๋๋ค. ์์ ๊ฒฝ์ฐ ์ด๋ฒคํธ ํ๊ฒ์ **๋ฒํผ ์์**, ์ด๋ฒคํธ ํ์
์ **'click'**, ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ **์ต๋ช
ํจ์**์
๋๋ค. |
| 141 | + |
| 142 | +๋๋ถ๋ถ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ์ด๋ฒคํธ ํ๊ฒ์ ๋ฐ์ธ๋ฉํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ์ง๋ง, ๋ฐ๋์ ๊ทธ๋ฐ ๊ฒ์ ์๋๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ `์ด๋ฒคํธ ํ๊ฒ ๋๋ ์ ํ๋ ์ด๋ฒคํธ๋ฅผ ์บ์นํ DOM ๋
ธ๋ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ` ๋๊ธฐ ๋๋ฌธ์ด์ฃ . |
| 143 | + |
| 144 | +์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ๋ ๊ฒฐ๊ตญ DOM Node ๊ฐ์ฒด์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋์ผํ๊ฒ ๋ฑ๋กํ๋ ๋ฐฉ์์ด๋, ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ `HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ถ๋ฆฌ`์
๋๋ค. ๊ทธ๋ฐ๋ฐ, ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ์ค์ฒฉ๋์ง ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ๋ ๋จ ํ๋๋ง ๋ฑ๋กํ ์ ์๋ ๊ฒ์ด์ฃ . ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DOM ํ์ค์ ์ถ๊ฐ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค. |
| 145 | + |
| 146 | +<br> |
| 147 | + |
| 148 | +### `addEventListener` ๋ฉ์๋ |
| 149 | +> DOM Level 2์ ๋์
๋์์ผ๋ฉฐ `EventTarget.prototype.addEventListener` ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค. |
| 150 | +
|
| 151 | +<br> |
| 152 | + |
| 153 | +<div align='center'> |
| 154 | + |
| 155 | +<img src='./img/event/addEventListener.jpg' width='900'/> |
| 156 | + |
| 157 | +</div> |
| 158 | + |
| 159 | +<br> |
| 160 | + |
| 161 | +- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฌธ์์ด์ธ ์ด๋ฒคํธ ํ์
์ ์ ๋ฌํ๋๋ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ on ์ ๋์ฌ๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค. |
| 162 | +- ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ๋ฌํฉ๋๋ค. |
| 163 | +- ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก๋ ์ด๋ฒคํธ ์ ํ ๋จ๊ณ(์บก์ฒ๋ง ๋๋ ๋ฒ๋ธ๋ง)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. |
| 164 | + |
| 165 | +```html |
| 166 | +<!DOCTYPE html> |
| 167 | +<html lang="en"> |
| 168 | + |
| 169 | + <head> |
| 170 | + <meta charset="UTF-8"> |
| 171 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| 172 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 173 | + <title>Document</title> |
| 174 | +</head> |
| 175 | + |
| 176 | +<body> |
| 177 | + <button>Click</button> |
| 178 | + <script> |
| 179 | + const $button = document.querySelector('button'); |
| 180 | + $button.addEventListener('click', function () { |
| 181 | + console.log('button click'); |
| 182 | + }); |
| 183 | + </script> |
| 184 | +</body> |
| 185 | + |
| 186 | +</html> |
| 187 | +``` |
| 188 | +- addEventListener ๋ฉ์๋ ๋ฐฉ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ๋ฐ์ธ๋ฉ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. |
| 189 | + - ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉํ์ง ์๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ `์ธ์๋ก ์ ๋ฌ`ํ๊ธฐ ๋๋ฌธ์ด์ฃ . |
| 190 | +- addEventListener ๋ฉ์๋๋ ํ๋ ์ด์์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ์ ์์ผ๋ฉฐ, ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋ฑ๋ก๋ ์์๋๋ก ํธ์ถ๋ฉ๋๋ค. |
| 191 | + - ๋จ, ์ฐธ์กฐ๊ฐ ๋์ผํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค๋ณต ๋ฑ๋กํ๋ฉด ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ๋ฑ๋ก๋ฉ๋๋ค. |
| 192 | + ```html |
| 193 | + <script> |
| 194 | + const $button = document.querySelector('button'); |
| 195 | +
|
| 196 | + const handleClick = function () { |
| 197 | + console.log('button click'); |
| 198 | + } |
| 199 | + // ํ๋๋ง ๋ฑ๋ก๋ฉ๋๋ค. |
| 200 | + $button.addEventListener('click', handleClick); |
| 201 | + $button.addEventListener('click', handleClick); |
| 202 | + </script> |
| 203 | + ``` |
| 204 | + |
| 205 | +<br> |
0 commit comments