Skip to main content

Javascript Event

Event คืออะไร ?

การสื่อสารอีกประเภทคือการสื่อสาร "html ส่ง Event ไปยัง javascript" เพื่อให้ javascript ทำการจัดการหลังเกิด Event แล้ว

Event คือสิ่งที่เกิดขึ้นบนเว็บไซต์ซึ่งเกิดอาจจะเกิดจากเหตุการณ์บน browser (เช่น โหลดเว็บเสร็จ, resize หน้าจอ) หรือ เหตุการณ์จาก user เช่น

  • เมื่อคลิกที่ปุ่มแล้วเกิดอะไรขึ้น (onclick)
  • เมื่อ user กำลังเปลี่ยนของใน radio (onchange)
  • เมื่อ user กำลังพิมพ์ที่กล่องข้อความให้เกิดอะไรขึ้น (onkeydown)
  • เมื่อ user เอาเมาส์วางบนข้อความเกิดอะไรขึ้น (onmouseover)

ตัวอย่างการส่งค่า Event จาก html ไปยัง javascript

  1. onclick การดักจับ event เมื่อ user มีการคลิกที่ element ใน html (ใช้ได้กับทุก element แต่ส่วนใหญ่จะใช้กับปุ่ม หรือ สิ่งที่ user สามารถคลิกได้)

ตัวอย่าง เพิ่ม onclick ให้กับ button เมื่อ button โดนกดโดย user จะแสดงข้อความออกมาตรง console.log

<button onclick="userClick()">ทดลองกด</button>

...
<script>
// สร้าง function สำหรับการรับ Event ชื่อ userClick และ function นี้จะถูกเรียกเมื่อ onclick ทำงาน
function userClick() {
console.log('user clicked')
}
</script>
  1. onchange การดักจับเมื่อ input มีการเปลี่ยนแปลงค่า (ปกติใช้ได้กับ input อย่าง text, radio, checkbox)

ตัวอย่าง เพิ่ม onchange ให้กับ radio เพศ โดยเมื่อเปลี่ยนเพศให้แสดงเพศที่เปลี่ยนออกมา (เราจะใช้ร่วมกับ querySelector ก่อนหน้านี้)

<input type="radio" name="gender" value="ชาย" onchange="changeGender()"> ชาย
<input type="radio" name="gender" value="หญิง" onchange="changeGender()"> หญิง
<input type="radio" name="gender" value="ไม่ระบุ" onchange="changeGender()"> ไม่ระบุ

...
<script>
// สร้าง function สำหรับการรับ Event ชื่อ changeGender และ function นี้จะถูกเรียกเมื่อ onchange ทำงาน
function changeGender() {
const selectedGender = document.querySelector('input[name=gender]:checked')
console.log('selected gender', selectedGender.value)
}
</script>
  1. onkeydown, onkeyup, onkeypress การดักจับเมื่อ user มีการกดลง keyboard
  • onkeydown = เมื่อ user กดลงบน keyboard (จังหวะกด)
  • onkeyup = เมื่อ user กดปล่อยมือจากปุ่ม keyboard (จังหวะปล่อยหลังกด)
  • onkeypress = จังหวะที่ตัวอักษรถูกส่งออกมา (เกิดหลัง onkeydown, เกิดก่อน onkeyup)

ตัวอย่าง เพิ่มจังหวะ onkeypress ดักจับตอนที่ user กำลังพิมพ์ input ออกมา ให้ข้อความที่พิมพ์ในกล่อง input แสดงออกมาผ่าน console (ใช้ร่วมกับ querySelector)

ชื่อจริง <input type="text" name="firstname" onkeypress="changeName()">
...

<script>
function changeName () {
const firstNameInput = document.querySelector('input[name=firstname]')
console.log('change firstname', firstNameInput.value)
}
</script>
  1. onmouseover, onmouseup, onmousedown การดักจับเมื่อ uesr เอาเมาส์ไปวางที่ element html นั้นๆ
  • onmouseover เมื่อเมาส์วางอยู่บน element นั้น (หรือตัวลูกของมัน)
  • onmousedown เมื่อคลิกเมาส์ที่ชิ้นนั้น (กำลังคลิก)
  • onmouseup เมื่อปล่อยเมาส์ที่กำลังคลิกนั้นออก

ลำดับที่เกิดขึ้นคือ onmouseover > onmousedown > onmouseup

ตัวอย่าง

<p id="myP"
onmousedown="mouseDown()"
onmouseup="mouseUp()"
onmouseover="mouseOver()">
ข้อความใดๆ
</p>
...
<script>
function mouseDown() {
console.log('ข้อความถูก mouseDown')
}

function mouseUp() {
console.log('ข้อความถูก mouseUp')
}

function mouseOver() {
console.log('เมาส์กำลังอยู่บนข้อความ')
}
</script>

ดูตัวอย่างเพิ่มเติมได้ที่ https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousedown

ตัวอย่างการ bind event ด้วย addEventListener

อีกท่าหนึ่งที่สามารถเพิ่ม event เข้าไปได้ คือท่า addEventListener มีความแตกต่างตรงนี้ addEventListener จะทำการ access DOM แล้วเพิ่มเองจาก javascript (แตกต่างจากด้านบนที่ใส่ผ่าน html)

วิธีการใช้ท่า addEventListener คือการเพิ่มลงใน javascript ทันทีตอนเปิด tag <script> มา และใช้ชื่อ event โดยการลบ "on" นำหน้าทิ้งไป (ดูตามตัวอย่างเพิ่มเติม แต่ Event ดักจับเหมือนกับท่าบน)

ตัวอย่างที่ 1 การเพิ่ม event click

<button id="testbutton">ปุ่มที่ 1</button>
<button onclick="clickButton()">ปุ่มที่ 2</button>

<script>
document.getElementById('testbutton').addEventListener('click', function() {
console.log('คลิกปุ่มที่ 1')
})
function clickButton () {
console.log('คลิกปุ่มที่ 2')
}
</script>

เพื่อให้เข้าใจง่ายไปในทิศทางเดียวกัน เราจะยังไม่ใช้ท่านี้ตลอด Session นี้ เคสนี้จะเหมาะกับกรณีที่มีการสร้าง DOM และต้องการเพิ่ม Event เองจาก Javascript ซึ่งถ้ามีโอกาสจะพาใช้งานอีกที

สำหรับแหล่งรวมข้อมูลทั้งหมดสำหรับ javascript event ดูเพิ่มเติมได้ที่นี่ https://www.w3schools.com/js/js_events.asp