เมธอด addEventListener() คืออะไร?
เมธอด addEventListener() ใช้สำห ผูก Event Handler (ฟังก์ชันจัดการเหตุการณ์) ให้กับอิลิเมนต์** เป็นวิธีมาตรฐาน (W3C DOM Level 2) แทนที่วิธีเก่า onclick, onmouseover เป็นต้น
ไวยากรณ์ (Syntax)
element.addEventListener(event, function, capture);
พารามิเตอร์
| พารามิเตอร์ | คำอธิบาย | จำเป็น |
|---|---|---|
| event | ชื่อเหตุการณ์ (ไม่ต้องมี on นำหน้า) เช่น "click", "mouseover", "keydown" | Yes |
| function | ฟังก์ชัน Callback ที่จะรันเมื่อเกิดเหตุการณ์ | Yes |
| capture | Boolean: true = Capture Phase, false = Bubble Phase (Default) | No |
ตัวอย่างการใช้งาน
<!DOCTYPE html>
<html>
<body>
<h2>ตัวอย่าง Event Listener</h2>
<button id="btn">คลิกฉัน</button>
<p id="log"></p>
<script>
var btn = document.getElementById("btn");
var log = document.getElementById("log");
// ผูกหลาย Event ให้ปุ่มเดียวได้
btn.addEventListener("mouseover", function() {
log.innerHTML += "เมาส์ชี้ปุ่ม! ";
});
btn.addEventListener("click", function() {
log.innerHTML += "!! กดปุ่มแล้ว !! ";
});
btn.addEventListener("mouseout", function() {
log.innerHTML += "เมาส์ออกจากปุ่ม. ";
});
</script>
</body>
</html>
ผลลัพธ์
ชี้เมาส์ที่ปุ่ม → "เมาส์ชี้ปุ่ม!"
คลิกปุ่ม → "!! กดปุ่มแล้ว !!"
เลื่อนเมาส์ออก → "เมาส์ออกจากปุ่ม."
ข้อดีของ addEventListener()
- ผูก **หลาย Handler** ให้ Event เดียวได้ (ไม่ทับซ้อน)
- ควบคุม Phase ได้ (Capture vs Bubble)
- แยก HTML และ JavaScript (Unobtrusive)
- ลบได้ด้วย
removeEventListener() - รองรับ Options Object:
{ once: true, passive: true, capture: false }
Options Object (Modern)
element.addEventListener('click', handler, {
once: true, // รันครั้งเดียว แล้วลบตัวเองออก
passive: true, // บอกเบราวเซอร์ว่าไม่มี preventDefault() เพิ่ม Performance (scroll/touch)
capture: false // Bubble phase (default)
});
Event Flow: Capture → Target → Bubble
<div id="parent">
<button id="child">Click</button>
</div>
parent.addEventListener('click', () => console.log('Parent Capture'), true); // 1. Capture
child.addEventListener('click', () => console.log('Child Capture'), true); // 2. Capture
child.addEventListener('click', () => console.log('Child Bubble'), false); // 3. Target + Bubble
parent.addEventListener('click', () => console.log('Parent Bubble'), false); // 4. Bubble
// คลิก Child → Log: Parent Capture, Child Capture, Child Bubble, Parent Bubble