๐ŸฆŽ [๋”ฅ๋‹ค์ด๋ธŒ ์Šคํ„ฐ๋””] 3rd- 40. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์ด์ง€ยท2021๋…„ 9์›” 20์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
4/13

Jay

1. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก์‹œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ํ• ๋‹นํ•˜๋Š” ๋“ฑ๋ก ๋ฐฉ๋ฒ•๊ณผ ํ•จ์ˆ˜ ์ฐธ์กฐ ํ˜•ํƒœ๋กœ ํ• ๋‹นํ•˜์ง€ ์•Š๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

a. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹ : ์–ดํŠธ๋ฆฌ ๋ทฐํŠธ์˜ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ ๋“ฑ์˜ ๋ฌธ์„ ํ• ๋‹นํ•˜๋ฉด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋œ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ํ•จ์ˆ˜ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ํ˜ธ์ถœ๋ฌธ์„ ํ• ๋‹นํ•œ ๊ฒƒ์ด๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก์ด๋ž€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋ธŒ๋ผ์šฐ์ €์— ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋“ฑ๋ก์‹œ ์ฝœ๋ฐฑํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•จ์ˆ˜ ์ฐธ์กฐ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ํ˜ธ์ถœ๋ฌธ์„ ๋“ฑ๋กํ•˜๋ฉด, ํ˜ธ์ถœ๋ฌธ์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋“ฑ๋ก๋œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ์„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋“ฑ๋กํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ, ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ์„ ๋“ฑ๋กํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ; ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ํ•ธ๋“ค.. ๊ฐ€๋Šฅ

b. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ ๋ฐฉ์‹:

dom ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ์— ๋Œ€์‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด์— ํ•จ์ˆ˜๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•˜๋ฉด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋œ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ด๋ฒคํŠธ ํƒ€๊นƒ์ด๋‚˜, ์ „ํŒŒ๋œ ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•  DOM ๋…ธ๋“œ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ์— ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

c. add EventListener ๋ฉ”์„œ๋“œ ๋ฐฉ์‹:

๋งˆ์ง€๋ง‰ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•  ์ด๋ฒคํŠธ ์ „ํŒŒ๋‹จ๊ณ„ (์บก์ณ๋ง ๋˜๋Š” ๋ฒ„๋ธ”๋ง)์„ ์ง€์ •ํ•œ๋‹ค. ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ , false๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„์—์„œ ์บ์น˜ํ•˜๊ณ (default) , true ์ด๋ฉด ์บก์ณ๋ง ๋‹จ๊ณ„์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•œ๋‹ค. ์ด๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก ๊ฐ€๋Šฅํ•˜๋‹ค. (q. ๋‹จ ์ฐธ์กฐ๊ฐ€ ๋™์ผํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ค‘๋ณต๋“ฑ๋กํ•˜๋ฉด ํ•˜๋‚˜์˜ ํ•ธ๋“ค๋Ÿฌ๋งŒ ๋“ฑ๋ก..) ์ฐธ์กฐ ๋™์ผ โ‡’ 1, 2,3 ์ด ๋‹ค ๋˜‘๊ฐ™์€ ๊ฐ’์„ ํ• ๋‹น.. ?์™„์ „ ์นดํ”ผ๋ณธ ํ• ๋‹น์‹œ.. ํ•˜๋‚˜๋งŒ ์ˆ˜ํ–‰..

2. target๊ณผ currentTarget ํ”„๋กœํผํ‹ฐ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ด ๋‘ ๊ฐœ์˜ ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

target : ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋” ์š”์†Œ
current target: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ dom ์š”์†Œ

์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•œ ๋” ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€๋งŒ, ๋‚˜์ค‘์— ์‚ด ํŽด๋ณธ ์ด๋ฒคํŠธ ์œ„์ž„์—์„œ๋Š” ๊ฐ์ฒด์˜ target ํ”„๋กœํผํ‹ฐ์™€ currentTargetํ”„๋กœํผํ‹ฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋” ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ex) ๊ตฌํ˜„ ์‹œ ๋ฐ”๊นฅ์ชฝ overlay ๊ตฌํ˜„.. ์ž์‹์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ์ด๋ฒคํŠธ๋ฅผ ๋ถ€๋ชจ์—๊ฒŒ ์œ„์ž„ํ•ด์„œ..

stop propagation โ†’ ๋ฒ„๋ธ”๋ง๋ง‰๊ธฐ. ์บก์ณ๋ง์„ ๋ง‰๋Š” ์ผ€์ด์Šค๋Š” ๋ณ„๋กœ ์—†์Œ.

(์œˆ๋„์šฐ) ์บก์ณ๋ง โ‡’ ํƒ€๊ฒŸ => ๋ฒ„๋ธ”๋ง

c.f) preventdefualt? ex. alink ์ฒ˜๋Ÿผ ๋„˜์–ด๊ฐ€๋Š”๊ฑฐ ๋ง‰๊ธฐ.. (๋ธŒ๋ผ์šฐ์ € ๋””ํดํŠธ ์•ก์…˜ )

3. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฌธ์—์„œ button1๊ณผ button2์— ๊ฐ๊ฐ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ™”๋ฉด์ด ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ๋งํ•˜๊ณ  ๊ทธ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <button class="button1">0</button>
    <button class="button2">0</button>
    <script>
      const $button1 = document.querySelector(".button1");
      const $button2 = document.querySelector(".button2");

      $button1.onclick = function (e) {
        ++this.textContent;
      };

      $button2.addEventListener("click", (e) => {
        ++this.textContent;
      });
    </script>
  </body>
</html>

() โ‡’ {} ์˜ ๊ฒฝ์šฐ์—” ์œˆ๋„์šฐ ๊ฐ์ฒด๊ฐ€ this!!! ๋”ฐ๋ผ์„œ count๊ฐ€ ์•ˆ์˜ฌ๋ผ๊ฐ.

ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’ ์ž์ฒด๊ฐ€ ํ• ๋‹น๋˜์„œ./ ๋ฐ”๋กœ ์‹คํ–‰. ์ฝ˜์†” ์ฐํ˜€๋ฒŒ์ž„...

profile
์ด์ง€ํ”ผ์ง€๋ ˆ๋ชฌ์Šคํ€ด์ง€๐Ÿ‹

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด