๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/Javascript

Event

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 11. 2.

Event

๊ฐœ์š”

โœ” Event๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ฌ๊ฑด(action) ํ˜น์€ ๋ฐœ์ƒ(occurence)์ธ๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋“ค์— ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹œ์Šคํ…œ์ด ๋งํ•ด์ฃผ๋Š” ๊ฒƒ
โœ” ex: ํด๋ฆฝ, ํ‚ค๋ณด๋“œ ํ‚ค ์ž…๋ ฅ, ๋ธŒ๋ผ์šฐ์ € ๋‹ซ๊ธฐ, ๋ฐ์ดํ„ฐ ์ œ์ถœ, ํ…์ŠคํŠธ ๋ณต์‚ฌ ๋“ฑ๋“ฑ...

Event object

โœ” ๋„คํŠธ์›Œํฌ ํ™œ๋™์ด๋‚˜ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ™์€ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ์กด์žฌ
โœ” DOM ์š”์†Œ๋Š” Event๋ฅผ '์ˆ˜์‹ '
โœ” ๋ฐ›์€ Event '์ฒ˜๋ฆฌ'

  • Event ์ฒ˜๋ฆฌ๋Š” ์ฃผ๋กœ addEventListner()๋ผ๋Š” Event ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋‹ค์–‘ํ•œ html ์š”์†Œ์— '๋ถ€์ฐฉ' ํ•ด์„œ ์‚ฌ์šฉ

Event handler - addEventListner()

โœ” ๋Œ€์ƒ์— ํŠน์ • event๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•  ์ผ์„ ๋“ฑ๋กํ•œ๋‹ค

EventTarget.addEventListner(type, listner)

โœ” ์ง€์ •ํ•œ Event๊ฐ€ ๋Œ€์ƒ์— ์ „๋‹ฌ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์„ค์ •
โœ” Event๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด(Element, Document, Window ๋“ฑ)์„ ๋Œ€์ƒ(EventTarget)์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ

โœ” type

  • ๋ฐ˜์‘ํ•  Event ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ฌธ ๋ฌธ์ž์—ด
  • input, click, submit...

โœ” listner

  • ์ง€์ •๋œ ํƒ€์ž…์˜ Event๋ฅผ ์ˆ˜์‹ ํ•  ๊ฐ์ฒด
  • JavaScript function ๊ฐ์ฒด(์ฝœ๋ฐฑํ•จ์ˆ˜)์ด์–ด์•ผ ํ•œ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋ฐœ์ƒํ•œ Event ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ Event ๊ฐ์ฒด๋ฅผ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

Event ์‹ค์Šต

  1. ๋ฒ„ํŠผ ์นด์šดํŠธ
   <body>
    <button id="btn">๋ฒ„ํŠผ</button>
    <p id="counter">0</p>

    <script>
      const btn = document.querySelector('#btn')
      let countNum = 0

      // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ž‘์„ฑ
      btn.addEventListener('click', function (event) {
        // console.log(event)
        const pTag = document.querySelector('#counter')

        countNum += 1

        pTag.innerText = countNum
      })
    </script>
   </body>
  1. input ์ž…๋ ฅ๊ฐ’ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ
   <body>
     <input type="text" id="text-input" />
     <p></p>
     <script>
       // 1. input ์„ ํƒ
       const inputTag = document.querySelector("#text-input");

       // 2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ถ€์ฐฉ
       inputTag.addEventListener("input", function (event) {
         const pTag = document.querySelector("p");
         // ๋ชจ๋“  ์ •๋ณด๋Š” event์— ์ €์žฅ! .target์„ ํ†ตํ•ด ์ ‘๊ทผ
         pTag.innerText = event.target.value;
       });
     </script>
   </body>
  1. ์ž…๋ ฅ๊ฐ’ ์‹ค์‹œ๊ฐ„ ์ถœ๋ ฅ + button ํด๋ฆญ ์‹œ ์ถœ๋ ฅ
   <body>
      <h1></h1>
      <button id="btn">ํด๋ฆญ</button>
      <input type="text" />

      <script>
         const btn = document.querySelector("#btn");
         // btn์ด ํด๋ฆญ ๋˜๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰
         btn.addEventListener("click", function (event) {
           // h1 ํƒœ๊ทธ ์„ ํƒ
           const h1Tag = document.querySelector("h1");
           // ํด๋ž˜์Šค blue ํ† ๊ธ€
           h1Tag.classList.toggle("blue");
         });

         // input
         const inputTag = document.querySelector("input");

         // input์— ๊ฐ’์ด ์ž…๋ ฅ๋˜๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰
         inputTag.addEventListener("input", function (event) {
           // h1 ํƒœ๊ทธ ์‹คํ–‰
           const h1Tag = document.querySelector("h1");
           // input๊ฐ’์„ ํƒœ๊ทธ์˜ ์ปจํ…์ธ ๋กœ ์ฑ„์šฐ๊ธฐ
           h1Tag.innerText = event.target.value;
         });
      </script>
   </body>

Event ์ทจ์†Œ

event.preventDefault()

โœ” ํ˜„์žฌ Event์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์ค‘๋‹จ
โœ” HTML ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋ง‰์Œ
โœ” HTMl ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์˜ˆ์‹œ

  • a ํƒœ๊ทธ: ํด๋ฆญ ์‹œ ํŠน์ • ์ฃผ์†Œ๋กœ ์ด๋™
  • form ํƒœ๊ทธ: form ๋ฐ์ดํ„ฐ ์ „์†ก

์‹ค์Šต

  1. ๋ณต์‚ฌ ๋ฐฉ์ง€
   <body>
     <div>
       <h1>์ •๋ง ์ค‘์š”ํ•œ ๋‚ด์šฉ</h1>
     </div>

     <script>
       // ๋ณต์‚ฌ ๋ฐฉ์ง€ ์ฝ”๋“œ
       const h1Tag = document.querySelector("h1");
       h1Tag.addEventListener("copy", function (event) {
         event.preventDefault();
         // ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ ์ถœ๋ ฅ
         alert("๋ณต์‚ฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
       });
     </script>
   </body>

Event ์ข…ํ•ฉ ์‹ค์Šต

[์ฐธ๊ณ ] lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โœ” ๋ชจ๋“ˆ์„ฑ, ์„ฑ๋Šฅ ๋ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” JavaScript ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โœ” array, object ๋“ฑ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์œ ์šฉํ•˜๊ณ  ๊ฐ„ํŽธํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ œ๊ณต
โœ” ex: reverse, sortBy, range, random...

์‹ค์Šต ์ง„ํ–‰

  1. ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋žœ๋ค ๋กœ๋˜ ๋ฒˆํ˜ธ 6๊ฐœ ์ถœ๋ ฅ
   <body>
     <h1>๋กœ๋˜ ์ถ”์ฒœ ๋ฒˆํ˜ธ</h1>
     <button id="lotto-btn">ํ–‰์šด ๋ฒˆํ˜ธ ๋ฐ›๊ธฐ</button>
     <div id="result"></div>

     <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
     <script>
       // ๋ฒ„ํŠผ ์„ ํƒํ•˜๊ธฐ
       const button = document.querySelector("#lotto-btn");
       button.addEventListener("click", function () {
         // ์ปจํ…Œ์ด๋„ˆ ๋งŒ๋“ค๊ธฐ
         const ballContainer = document.createElement("div");
         ballContainer.classList.add("ball-container");

         // ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ๋งŒ๋“ค๊ธฐ
         // lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉ
         const numbers = _.sampleSize(_.range(1, 46), 6);

         // ๊ณต ๋งŒ๋“ค๊ธฐ
         numbers.forEach((number) => {
           const ball = document.createElement("div");
           ball.classList.add("ball");
           ball.innerText = number;
           ball.style.backgroundColor = "crimson";
           // ๊ณต์„ ์ปจํ…Œ์ด๋„ˆ์˜ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€
           ballContainer.appendChild(ball);
         });
         // ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฒฐ๊ณผ ์˜์—ญ์˜ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€
         const result = document.querySelector("#result");
         result.appendChild(ballContainer);
       });
     </script>
   </body>
  1. CREATE, READ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” todo app ๋งŒ๋“ค๊ธฐ
   <body>
     <form action="#">
       <input type="text" class="inputData" />
       <input type="submit" value="Add" />
     </form>
     <ul></ul>

     <script>
       const formTag = document.querySelector("form");

       const addTodo = function (event) {
         // ์ œ์ถœ ์‹œ ์ฃผ์†Œ ์ด๋™์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ์ทจ์†Œ
         event.preventDefault();

         // ์ž…๋ ฅ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
         const inputTag = document.querySelector(".inputData");
         const data = inputTag.value;

         // .trim() ์–‘์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ -> ๊ณต๋ฐฑ์„ ์ œ๊ฑฐ ํ–ˆ์„ ๋•Œ ๋ฌธ์ž๊ฐ’์ด ์žˆ๋‹ค๋ฉด
         if (data.trim()) {
           const liTag = document.createElement("li");
           liTag.innerText = data;

           const ulTag = document.querySelector("ul");
           ulTag.appendChild(liTag);
         } else {
           alert("ํ•  ์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”");
         }
         event.target.reset();
       };

       formTag.addEventListener("submit", addTodo);
     </script>
   </body>

โœ” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์ดํ›„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ๋ฐ–์œผ๋กœ ๋นผ์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

'โญ Personal_Study > Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ  (0) 2022.11.04
Callback & Promise  (0) 2022.11.04
JavaScript์—์„œ์˜ This  (0) 2022.11.03
JavaScript๋ฅผ ํ™œ์šฉํ•œ DOM ์กฐ์ž‘ ๊ธฐ์ดˆ  (0) 2022.11.02
DOM (Document Object Model)  (0) 2022.11.01

๋Œ“๊ธ€