CodeGym /ํ–‰๋™ /Frontend SELF KO /์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

Frontend SELF KO
๋ ˆ๋ฒจ 41 , ๋ ˆ์Šจ 4
์‚ฌ์šฉ ๊ฐ€๋Šฅ

5.1 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์˜ ๊ธฐ์ดˆ

JavaScript์˜ ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ๋ฐ˜์‘ํ•˜๋„๋ก ํ•ด์ค˜. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, ํผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋“ฑ์ด ์žˆ์–ด. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š” ๊ฒƒ์€ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์•ผ.

์ด๋ฒคํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ด๋ฒคํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ "๋ฌด์–ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค"๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์‹ ํ˜ธ์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜์—ˆ์„ ๋•Œ๋ฅผ ๋ง์ด์•ผ. ์ด๋Ÿฐ ์‹ ํ˜ธ์— ๋ฐ˜์‘ํ•˜์—ฌ ํŠน์ •ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด.

์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜

์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์–‘ํ•ด. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„:

  • ๋งˆ์šฐ์Šค: click, dblclick, mouseover, mouseout, mousedown, mouseup, mousemove
  • ํ‚ค๋ณด๋“œ: keydown, keyup, keypress
  • ํผ: submit, change, focus, blur
  • ๋ฌธ์„œ/์ฐฝ: load, resize, scroll, unload

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(๋˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ)๋Š” ํŠน์ • ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜์—ฌ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์•ผ. ์ด๋ฒคํŠธ๋ฅผ "๋“ฃ๊ณ ", ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋ผ.

5.2 ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ํ•˜๊ธฐ

addEventListener๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ํ•˜๊ธฐ

addEventListener ๋ฉ”์†Œ๋“œ๋Š” ์š”์†Œ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜. ์ด๊ฑด onclick, onchange ๊ฐ™์€ HTML ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์— ๋น„ํ•ด ๋” ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•ด.

๋ฌธ๋ฒ•:

    
      element.addEventListener(event, handler, options);
    
  

์—ฌ๊ธฐ์„œ:

  • element: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์š”์†Œ
  • event: ๋ฐ˜์‘ํ•  ์ด๋ฒคํŠธ์˜ ํƒ€์ž… (์˜ˆ: 'click', 'input', 'keydown')
  • handler: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜
  • options: ์ถ”๊ฐ€์ ์ธ ์˜ต์…˜ (์„ ํƒ์  ์ธ์ž)

์˜ˆ์ œ: click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€๋ผ. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๊ฒŒ ๋ผ.

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Example</title>
        </head>
        <body>
        <button id="myButton">Click me</button>

        <script>
          const button = document.getElementById('myButton');

          button.addEventListener('click', function() {
            alert('Button clicked!');
          });
        </script>
        </body>
      </html>
    
  

์˜ˆ์ œ: ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

addEventListener๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ์— ์—ฌ๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด.

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฒ„ํŠผ์— ์ถ”๊ฐ€๋ผ. ํด๋ฆญ ์‹œ ๋‘ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ์ฝ˜์†”์— ๊ฐ๊ฐ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ด.

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Example</title>
        </head>
        <body>
          <button id="myButton">Click me</button>

          <script>
            const button = document.getElementById('myButton');

            button.addEventListener('click', function() {
              console.log('First handler');
            });

            button.addEventListener('click', function() {
              console.log('Second handler');
            });
          </script>
        </body>
      </html>
    
  

5.3 options ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

options ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ๋™์ž‘์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์€:

  • once: true์ผ ๊ฒฝ์šฐ, ํ•ธ๋“ค๋Ÿฌ๋Š” ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ  ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ผ
  • capture: true์ผ ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ๋Š” ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ ๋Œ€์‹  ์บก์ฒ˜ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌ๋ผ
  • passive: true์ผ ๊ฒฝ์šฐ, ํ•ธ๋“ค๋Ÿฌ๊ฐ€ preventDefault()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด

์˜ˆ์ œ: ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ

์ด ์˜ˆ์ œ์—์„œ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ  ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ผ.

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Example</title>
        </head>
        <body>
          <button id="myButton">Click me</button>

          <script>
            const button = document.getElementById('myButton');

            button.addEventListener('click', function() {
              alert('This will be shown only once');
            }, { once: true });
          </script>
        </body>
      </html>
    
  

5.4 ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐํ•˜๊ธฐ

removeEventListener๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐํ•˜๊ธฐ

removeEventListener ๋ฉ”์†Œ๋“œ๋Š” addEventListener๋กœ ์ถ”๊ฐ€๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜. ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ด.

๋ฌธ๋ฒ•:

    
      element.removeEventListener(event, handler, options)
    
  

์—ฌ๊ธฐ์„œ:

  • element: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ œ๊ฑฐ๋  ์š”์†Œ
  • event: ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ์ด๋ฒคํŠธ์˜ ํƒ€์ž…
  • handler: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ง€์ •๋œ ํ•จ์ˆ˜
  • options: ์ถ”๊ฐ€์ ์ธ ์˜ต์…˜ (ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ์‹œ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•ด์•ผ ํ•ด)

์˜ˆ์ œ: click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ

์ด ์˜ˆ์ œ์—์„œ๋Š” click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฒ„ํŠผ์— ์ถ”๊ฐ€๋ผ. ๋‹ค๋ฅธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ œ๊ฑฐ๋ผ.

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Example</title>
        </head>
        <body>
          <button id="myButton">Click me</button>
          <button id="removeButton">Remove Click Handler</button>

          <script>
            const button = document.getElementById('myButton');
            const removeButton = document.getElementById('removeButton');

            function clickHandler() {
              alert('Button clicked!');
            }

            button.addEventListener('click', clickHandler);

            removeButton.addEventListener('click', function() {
              button.removeEventListener('click', clickHandler);
              alert('Click handler removed');
            });
          </script>
        </body>
      </html>
    
  
1
ะžะฟั€ะพั
DOM ์š”์†Œ,ย  41 ัƒั€ะพะฒะตะฝัŒ,ย  4 ะปะตะบั†ะธั
ะฝะตะดะพัั‚ัƒะฟะตะฝ
DOM ์š”์†Œ
DOM ์š”์†Œ
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION