นิยาม
DOM Events คือเหตุการณ์ที่เกิดขึ้นบนหน้าเว็บ ซึ่ง JavaScript สามารถจับ (listen) และตอบสนอง (handle) ได้ Events เป็นส่วนหนึ่งของ DOM Level 3 ทุก HTML Element มีชุด Events ของตัวเอง
ตัวอย่างพื้นฐาน: เปลี่ยนข้อความเมื่อคลิก
<!DOCTYPE html>
<html>
<body>
<p onclick="myEvent(this)">Click me</p>
<script>
function myEvent(id) {
id.innerHTML = "Welcome!";
}
</script>
</body>
</html>
ประเภท Events หลัก
1. Mouse Events
| Event | คำอธิบาย |
|---|---|
click | คลิกเมาส์ซ้าย (mousedown + mouseup บนองค์ประกอบเดียวกัน) |
dblclick | ดับเบิลคลิก |
mousedown | กดปุ่มเมาส์ลง |
mouseup | ปล่อยปุ่มเมาส์ |
mousemove | เลื่อนเมาส์ |
mouseover | เมาส์เข้าเนื้อที่องค์ประกอบ (bubbles) |
mouseout | เมาส์ออกจากเนื้อที่องค์ประกอบ (bubbles) |
mouseenter | เมาส์เข้า (ไม่ bubbles - แนะนำกว่า mouseover) |
mouseleave | เมาส์ออก (ไม่ bubbles - แนะนำกว่า mouseout) |
2. Keyboard Events
| Event | คำอธิบาย |
|---|---|
keydown | กดปุ่มคีย์บอร์ดลง (ซ้ำได้ถ้ากดค้าง) |
keyup | ปล่อยปุ่มคีย์บอร์ด |
keypress | กดปุ่มที่พิมพ์ตัวอักษรได้ (Deprecated - ใช้ keydown แทน) |
3. Form Events
| Event | คำอธิบาย |
|---|---|
submit | ส่งฟอร์ม |
change | ค่าของ input/select/textarea เปลี่ยนและสูญเสียโฟกัส |
input | ค่าเปลี่ยนทันที (Real-time) |
focus | ได้รับโฟกัส |
blur | สูญเสียโฟกัส |
4. Window/Document Events
load- โหลดหน้าเว็บเสร็จ (รวมรูปภาพ, สไตล์)DOMContentLoaded- โหลด HTML เสร็จ (ไม่รอรูปภาพ) แนะนำกว่า loadresize- ปรับขนาดหน้าต่างscroll- เลื่อนหน้าเว็บbeforeunload- ก่อนออกจากหน้าเว็บ
ตัวอย่าง: onmouseover และ onmouseout
<html>
<head>
<script>
function over() {
document.write("Mouse Over");
}
function out() {
document.write("Mouse Out");
}
</script>
</head>
<body>
<p>Bring your mouse inside the division to see the result:</p>
<div onmouseover="over()" onmouseout="out()">
<h2> This is inside the division </h2>
</div>
</body>
</html>
Event Object
ทุก Event Handler จะรับ Event Object เป็นพารามิเตอร์แรก มี Properties/Methods สำคัญ:
event.target- องค์ประกอบที่ Trigger Eventevent.currentTarget- องค์ประกอบที่ผูก Listenerevent.preventDefault()- ยกเลิกพฤติกรรมเริ่มต้นevent.stopPropagation()- หยุด Event Bubblingevent.type- ชื่อ Event (เช่น "click")
Event Bubbling และ Capturing
- Capturing Phase: Event ไปจาก Window -> ... -> Target
- Target Phase: Event ที่ Target Element
- Bubbling Phase: Event ขึ้นจาก Target -> ... -> Window (Default)
ใช้ addEventListener(type, handler, true) เพื่อจับใน Capturing Phase