Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Events (เหตุการณ์) ใน JavaScript คืออะไร

Events คือ กลไกที่ JavaScript โต้ตอบกับ HTML เมื่อผู้ใช้หรือเบราว์เซอร์กระทำอะไรบนหน้าเว็บ (โหลดหน้า, คลิก, พิมพ์, Resize, ฯลฯ) Events เป็นส่วนหนึ่งของ DOM Level 3 ทุก HTML Element มีชุด Events ของตัวเอง

เหตุการณ์ทั่วไป

ตัวอย่าง: onclick

<html>
  <head>
    <script>
      function sayHello() {
        alert("Hello World");
      }
    </script>
  </head>
  <body>
    <p>คลิกปุ่มด้านล่างและดูผลลัพธ์</p>
    <form>
      <input type="button" onclick="sayHello()" value="Say Hello" />
    </form>
  </body>
</html>

วิธีผูก Event (Event Binding)

EventTrigger เมื่อ
onclickคลิกเมาส์ซ้าย
ondblclickดับเบิลคลิก
onmousedownกดปุ่มเมาส์
onmouseupปล่อยปุ่มเมาส์
onmouseoverเมาส์เข้าพื้นที่
onmouseoutเมาส์ออกพื้นที่
onkeydownกดปุ่มคีย์บอร์ด
onkeyupปล่อยปุ่มคีย์บอร์ด
onloadโหลดเสร็จ (window, img, script)
onresizeปรับขนาดหน้าต่าง
onscrollเลื่อน Scroll
onchangeค่า Input เปลี่ยน (select, checkbox, file)
onsubmitSubmit Form
oninputพิมพ์ใน Input (Real-time)

Event Object

element.addEventListener('click', function(event) {
  event.type;        // "click"
  event.target;      // Element ที่ trigger event
  event.currentTarget; // Element ที่ listener ผูกอยู่
  event.clientX/Y;   // ตำแหน่งเมาส์
  event.preventDefault(); // ยกเลิก default behavior
  event.stopPropagation(); // หยุด Bubbling
});

Event Phases

  1. Capturing Phase: จาก Window ลงมาถึง Target
  2. Target Phase: ที่ Element เป้าหมาย
  3. Bubbling Phase: จาก Target ขึ้นกลับ Window (Default)

แนะนำ: ใช้ addEventListener เสมอ หลีกเลี่ยง Inline Handlers

วิธีตัวอย่างข้อดี/ข้อเสีย
Inline HTML Attribute<button onclick="fn()">ง่าย แต่ผสม HTML/JS, ไม่แยก concerns, 1 handler ต่อ event
DOM Propertybtn.onclick = fnแยกได้ แต่ยัง 1 handler ต่อ event
addEventListener (แนะนำ)btn.addEventListener('click', fn)หลาย handlers, capturing/bubbling, remove ได้, แยก concerns