13. ์ด๋ฒคํŠธ

· โ˜• 6 min read · ๐Ÿ‘€... views

๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ

  1. ์ด๋ฒคํŠธ ํ๋ฆ„์— ๋Œ€ํ•œ ์ดํ•ด
  2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‹ค๋ฃจ๊ธฐ
  3. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์˜ ์ด๋ฒคํŠธ
  4. ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ

1. ์ด๋ฒคํŠธ ํ๋ฆ„์— ๋Œ€ํ•œ ์ดํ•ด

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ HTML ์˜ ์ƒํ˜ธ์ž‘์šฉ์€ ๋ฌธ์„œ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์—์„œ ํŠน์ • ์ˆœ๊ฐ„์— ์ผ์–ด๋‚œ ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ด๋ฒคํŠธ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋จ
  • ์ด๋ฒคํŠธ๋Š” ๋ฆฌ์Šค๋„ˆ(ํ•ธ๋“ค๋Ÿฌ) ๋กœ ์ถ”์ ํ•˜๋ฉฐ ๋ฆฌ์Šค๋„ˆ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งŒ ์‹คํ–‰๋จ

1.1 ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง

  • ์ต์Šคํ”Œ๋กœ๋Ÿฌ์˜ ์ด๋ฒคํŠธ ํ๋ฆ„

  • ๋ฌธ์„œํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๊นŠ์ด ์œ„์ฐจํ•œ ์š”์†Œ์—์„œ ์‹œ์ž‘ํ•ด ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ์‹

    1
    2
    3
    4
    5
    6
    7
    8
    
    <html>
      <head>
        <title>title</title>
      </head>
      <body>
        <div id="myDiv">click me</div>
      </body>
    </html>
    
    • <div> ์š”์†Œ๋ฅผ ํด๋ฆญํ•˜๋ฉด

      1. <div>
      2. <body>
      3. <html>
      4. document

      ์˜ ์ˆœ์„œ๋Œ€๋กœ ๋ฐœ์ƒ

1.2 ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง

  • ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ ์ตœ์ƒ์œ„ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘
  • ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•จ

1.3 DOM ์ด๋ฒคํŠธ ํ๋ฆ„

  • ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง ๋‹จ๊ณ„, ํƒ€๊นƒ ๋‹จ๊ณ„, ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Œ
  • ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง, ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ๋‘ ๋‹จ๊ณ„๊ฐ€ ๋‹ค ํƒ€๊นƒ ๋‹จ๊ณ„์™€ ๋งž๋ฌผ๋ฆฌ๋Š” ๊ณณ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ ํƒ€๊นƒ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ž‘์—…ํ•  ๊ธฐํšŒ๊ฐ€ ๋‘ ๋ฒˆ ์ƒ๊น€ (??)

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

  • ์‚ฌ์šฉ์ž ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ทจํ•˜๋Š” ํŠน์ • ๋™์ž‘
  • on ์œผ๋กœ ์‹œ์ž‘ํ•จ
    • Ex) onclike, onload ๋“ฑ

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

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ด๋ฆ„์„ HTML ์†์„ฑ์— ์‚ฌ์šฉํ•˜์—ฌ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    <input type="button" value="click1" onclick="alert('clicked')"/>
      
    or
      
    <script type="text/javascript">
    function showMessage() {
      alert("hello!");
    }
    </script>
    <input type="buttion" value="click1" onclick="showMessage()"/>
    
  • ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด ํ™•์žฅ๋˜์–ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ document ์™€ ํ•ด๋‹น ์š”์†Œ์˜ ๋งด๋ฒ„์— ๋งˆ์น˜ ๋กœ์ปฌ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ(with ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง)

    1
    2
    3
    4
    
    <form method="post">
      <input type="text" name="username" value="">
      <input type="button" value="echo" onclick="alert(username.value)">
    </form>
    
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ฝ”๋“œ๊ฐ€ ์ค€๋น„๋˜๊ธฐ ์ „์— HTML ์š”์†Œ๊ฐ€ ๋จผ์ € ํ™”๋ฉด์— ๋ฐœ์ƒํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์กฐ์ž‘ํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ ํ™•์žฅ ๊ฒฐ๊ณผ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฆ„

  • HTML ๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ„์˜ ์ปคํ”Œ๋ง์ด ์‹ฌํ•˜๊ฒŒ ๋  ์ˆ˜๊ฐ€ ์žˆ์Œ (๋ณ€๊ฒฝ์ด ์–ด๋ ค์›€)

2.2 DOM ๋ ˆ๋ฒจ 0 ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

  • ์ „ํ†ต์ ์œผ๋กœ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•จ์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ

    1
    2
    3
    4
    5
    6
    7
    
    var btn = document.getElementById("myBtn");
    btn.onclick = function() {
      alert(this.id); // myBtn
    };
      
    // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ
    btn.onclick = null;
    

2.3 DOM ๋ ˆ๋ฒจ 2 ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

  • addEventListener(), removeEventListener()

  • ๋งค๊ฐœ๋ณ€์ˆ˜ (์ด๋ฒคํŠธ ์ด๋ฆ„, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์บก์ฒ˜ ๋‹จ๊ณ„์—์„œ ํ˜ธ์ถœ์—ฌ๋ถ€)

    1
    2
    3
    4
    
    var btn = document.getElementById("myBtn");
    btn.addEventListener("click", function() {
      alert(this.id);
    }, false);
    
  • ์œ„์˜ ์˜ˆ์ œ์—์„œ ํ•จ์ˆ˜๋Š” ์ต๋ช…ํ•จ์ˆ˜ ์ด๊ธฐ ๋•Œ๋ฌธ์— removeEventListener ๋กœ ์ง€์šธ ์ˆ˜ ์—†์Œ. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ง€์šฐ๊ณ  ํ•˜๋ ค๋ฉด

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    var btn = document.getElementById("myBtn");
    var handler = function() {
      alert(this.id);
    };
    btn.addEventListener("click", handler, false);
      
    //do something
      
    btn.removeEventListener("click", handler, false);
    

2.4 ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

  • IE8 ๋ฐ ์ด์ „ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ
  • attachEvent(), detachEvent()

3. Event ๊ฐ์ฒด ๋ฐ ํƒ€์ž…

  • DOM ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ด€๋ จ ์ •๋ณด๋Š” ๋ชจ๋‘ event ๊ฐ์ฒด์— ์ €์žฅ
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ this ๊ฐ์ฒด๋Š” ํ•ญ์ƒ currentTarget ์˜ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉฐ target์—๋Š” ์ด๋ฒคํŠธ์˜ ์‹ค์ œ ํƒ€๊นƒ๋งŒ ํฌํ•จ
  • preventDefault() ๋ฉ”์†Œ๋“œ๋Š” ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œ (cancelable ์ด true)
  • stopPropagation() ๋ฉ”์†Œ๋“œ๋Š” ์ด๋ฒคํŠธ ํ๋ฆ„์„ ๋ฉˆ์ถฐ์„œ ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง์ด๋‚˜ ๋ฒ„๋ธ”๋ง์„ ๋ชจ๋‘ ์ทจ์†Œ
  • event ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์•„์ง ์‹คํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์กด์žฌํ•˜๋ฉฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰์„ ๋งˆ์น˜๋ฉด event ๊ฐ์ฒด๋Š” ํŒŒ๊ดด๋จ

3.1 ์ด๋ฒคํŠธ ํƒ€์ž…

  • UI ์ด๋ฒคํŠธ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ์ด๋ฉฐ, BOM ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ
  • ํฌ์ปค์Šค ์ด๋ฒคํŠธ๋Š” ์š”์†Œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์–ป๊ฑฐ๋‚˜ ์žƒ์„ ๋•Œ
  • ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” ๋งˆ์šฐ์Šค๋กœ ์–ด๋–ค ๋™์ž‘์„ ์ทจํ•  ๋•Œ
  • ๋“ฑ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด ์™ธ์—๋„ HTML5 ์—์„œ ์ •์˜ํ•œ ์ด๋ฒคํŠธ ์ง‘ํ•ฉ์ด ์žˆ์Œ

3.2 UI ์ด๋ฒคํŠธ

  • ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์—ฐ๊ด€์ด ์—†์œผ๋ฉฐ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋‚จ๊ฒจ์ง„ ๊ฒƒ๋“ค
  • load - window ๊ฐ์ฒด์˜ load ์ด๋ฒคํŠธ๋Š” ์ด๋ฏธ์ง€๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ, CSS ํŒŒ์ผ ๊ฐ™์€ ์™ธ๋ถ€ ์ž์›์„ ํฌํ•จํ•ด ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ถˆ๋Ÿฌ์™”์„ ๋•Œ ๋ฐœ์ƒ
  • unload - load ์™€๋Š” ๋ฐ˜๋Œ€๋กœ ๋ฌธ์„œ๋ฅผ ์™„์ „ํžˆ ๋‹ซ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ ๊ฐ์ข… ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
  • resize - ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋†’์ด๋‚˜ ๋„ˆ๋น„๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ €๋ณ„๋กœ ๋ฐœ์ƒ ์‹œ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฌด๊ฑฐ์šด ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ ์ง€์–‘

3.3 Focus ์ด๋ฒคํŠธ

  • ์ด๋ฒคํŠธ ์š”์†Œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ์žƒ์„ ๋•Œ ๋ฐœ์ƒ
  • ํฌ์ปค์Šค๋ฅผ ์žƒ๋Š” ์š”์†Œ์—์„œ focusout, blur, DOMFocusOut ์ด ๋ฐœ์ƒ
  • ํฌ์ปค์Šค๋ฅผ ์–ป๋Š” ์š”์†Œ์—์„œ focusin, focus, DOMFocusIn ์ด ๋ฐœ์ƒ

3.4 ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์™€ ํœ  ์ด๋ฒคํŠธ

  1. click - ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์š” ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์—”ํ„ฐํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ๋ฐœ์ƒ
  2. dbclick - ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์š” ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋”๋ธ”ํด๋ฆญํ•  ๋•Œ ๋ฐœ์ƒ
  3. mousedown - ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ ๋ฐœ์ƒ (ํ‚ค๋ณด๋“œ ๋ฐœ์ƒ X)
  4. mouseenter - ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ๋ฐ–์—์„œ ์š”์†Œ ๊ฒฝ๊ณ„ ์•ˆ์œผ๋กœ ์ฒ˜์Œ ์ด๋™ํ•  ๋•Œ
  5. mouseleaver - ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ์œ„์— ์žˆ๋‹ค๊ฐ€ ์š”์†Œ ๊ฒฝ๊ณ„ ๋ฐ–์œผ๋กœ ์ด๋™ํ•  ๋•Œ
  6. mousemove - ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ์ฃผ๋ณ€์„ ์ด๋™ํ•˜๋Š” ๋™์•ˆ ๊ณ„์† ๋ฐœ์ƒ
  7. mouseout - ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ์œ„์— ์žˆ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์š”์†Œ ์œ„๋กœ ์ด๋™ํ•  ๋•Œ ๋ฐœ์ƒ
  8. mouseover - ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ๋ฐ”๊นฅ์— ์žˆ๋‹ค๊ฐ€ ์š”์†Œ ๊ฒฝ๊ณ„ ์•ˆ์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๋ฐœ์ƒ
  9. mouseup - ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์žˆ๋‹ค๊ฐ€ ๋†“์„ ๋•Œ ๋ฐœ์ƒ
  • ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด

    1
    2
    3
    4
    5
    
    var isSupported = document.implementation.hasFeature("MouseEvents", "2.0");
      
    or 
      
    var isSupported = document.implementation.hasFeature("MouseEvent", "3.0");
    
  • ๋ทฐํฌํŠธ ๊ธฐ์ค€์œผ๋กœ๋Š” clientX/clientY, ํŽ˜์ด์ง€ ๊ธฐ์ค€์œผ๋กœ๋Š” pageX, pageY

  • mousewheel ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค ํœ ์„ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ผ ๋•Œ ๋ฐœ์ƒ

  • ์›นํŽ˜์ด์ง€ ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด(์Šคํฌ๋ฆฐ ๋ฆฌ๋” ๋“ฑ ํ˜ธํ™˜)

    1. ์ฝ”๋“œ ์‹คํ–‰์—๋Š” click
    2. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ ์˜ต์…˜์„ ์ œ์‹œํ•  ๋•Œ onmouseover ์‚ฌ์šฉ ๊ธˆ์ง€
    3. ์ค‘์š”ํ•œ ๋™์ž‘์„ dbclick ๋กœ ์‹คํ–‰ ๊ธˆ์ง€

3.5 ํ‚ค๋ณด๋“œ์™€ ํ…์ŠคํŠธ ์ด๋ฒคํŠธ

  1. keydown - ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ์ฒ˜์Œ ๋ˆ„๋ฅผ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ๊ณ„์† ๋ฐœ์ƒ
  2. keypress - ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ๊ฒฐ๊ณผ๋กœ ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ์ฒ˜์Œ ๋ฐœ์ƒ, ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š” ๋™์•ˆ ๊ณ„์† ๋ฐœ์ƒ (textInput ์‚ฌ์šฉ ๊ถŒ์žฅ)
  3. keyup - ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค์—์„œ ์†์„ ๋—„ ๋•Œ ๋ฐœ์ƒ

3.6 HTML5 ์ด๋ฒคํŠธ

  1. contextmenu
    • ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ์„ ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด๊ฐ™์€ ํ˜•ํƒœ๋กœ, ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ํ‘œ์‹œ๋˜๋ ค๋Š” ์ˆœ๊ฐ„์— ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋ณธ ๋ฉ”๋‰ด๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ์Œ
    • ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ ์ปค์„œ ์œ„์น˜์™€ ๊ด€๋ จ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จ
  2. beforeunload
    • window ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํŽ˜์ด์ง€์—์„œ ๋– ๋‚˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์„ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์˜๋„๋กœ ๋งŒ๋“ค์–ด์ง
  3. DOMContentLoaded
    • ํ•ญ์ƒ load ์ด๋ฒคํŠธ๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ DOM ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์“ฐ์ž„
    • window ์˜ load ์ด๋ฒคํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ถˆ๋Ÿฌ์™€์•ผ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์™ธ๋ถ€ ์ž์›์ด ๋งŽ์„ ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ทธ๋Ÿด ๊ฒฝ์šฐ DOMContentLoaded ๋ฅผ ๋“ฑ๋ก
  4. readystatechange
    • ๋ฌธ์„œ๋‚˜ ์š”์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ •๋ณด๋กœ readyState ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ
    • uninitialized, loading, loaded, interactive, complete ๋ผ๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ์œผ๋‚˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ด ๋‹จ๊ณ„๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ „๋ถ€ ๋ฐŸ์ง€๋Š” ์•Š์Œ

4. ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์— ์ง์ ‘์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๋ฐ
    1. ๊ฐ ํ•จ์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•˜๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ
    2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŽ์ด ํ• ๋‹นํ•˜๋ ค๋ฉด DOM ์ ‘๊ทผ๋„ ๋งŽ์•„์ง€๋ฉฐ ์ด๋Š” ์ „์ฒด ํŽ˜์ด์ง€์˜ ์‘๋‹ต์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ

4.1 ์ด๋ฒคํŠธ ์œ„์ž„

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ๊ฐฏ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•˜๋‚˜๋งŒ ํ• ๋‹นํ•ด์„œ ํ•ด๋‹น ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    <ul id="myList">
      <li id="go1">go1</li>
      <li id="go2">go2</li>
      <li id="hi">hi</li>
    </ul>
      
    <script>
    var list = document.getElementById("myList");
    var handler = function() {
      switch(this.id) {
        case "go1":
          document.title = "go1";
          break;
            
        case "go2":
          document.title = "go2";
          break;
            
        case "hi":
          document.title = "hi";
          break;
      }
    };
    list.addEventListener("click", handler, false);
    </script>
    
    • ์ด๋ฒคํŠธ๊ฐ€ ๋ฒ„๋ธ”๋ง๋˜์–ด ์˜ฌ๋ผ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅ
    • ํ˜„์‹ค์ ์ด๊ธฐ๋งŒ ํ•˜๋‹ค๋ฉด ์ด๋ฒคํŠธ ํƒ€์ž…๋งˆ๋‹ค document ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‹จ ํ•˜๋‚˜์”ฉ๋งŒ ๋“ฑ๋กํ•ด์„œ ํŽ˜์ด์ง€์˜ ์ด๋ฒคํŠธ ์ „์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹์Œ

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

  • ๋ธŒ๋ผ์šฐ์ € ์ฝ”๋“œ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ์—ฐ๊ฒฐ์ด ๋งŽ์„ ์ˆ˜๋ก ํŽ˜์ด์ง€๊ฐ€ ๋Š๋ ค์ง€๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(ํ•˜๋‚˜๋Š” ์œ„์˜ ์œ„์ž„ ๋ฐฉ๋ฒ•)์€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐ ํ•˜๋Š” ๊ฒƒ

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    <div id="myDiv">
      <input type="button" value="click me" id="myBtn">
    </div>
      
    <script>
      var btn = document.getElementById("myBtn");
      btn.onclick = function() {
        // doSomething
          
        btn.onclick = null; // ์ž”๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ
          
        document.getElementById("myDiv").innerHTML = "์ง„ํ–‰์ค‘";
      };
    </script>
    
  • ์ž”๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋‹ค๋ฅธ ์ƒํ™ฉ์€ ํŽ˜์ด์ง€๋ฅผ ๋– ๋‚  ๋•Œ ์ด๋ฏ€๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋– ๋‚˜๊ธฐ ์ „์— onunload ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š” ํŽธ์ด ์ข‹์Œ

  • onload ์—์„œ ํ•œ ์ผ์€ ๋ฐ˜๋“œ์‹œ onunload์—์„œ ์ทจ์†Œํ•œ๋‹ค

Share on

snack
WRITTEN BY
snack
Web Programmer


What's on this Page