1. ความเข้าใจเกี่ยวกับ x-on
x-on
ใน Alpine.js ใช้สำหรับจับ Events ที่เกิดขึ้นใน DOM เช่น การคลิก, การเลื่อนเมาส์, การป้อนข้อมูลในฟอร์ม เป็นต้น โดย x-on
จะผูก Event Handler กับองค์ประกอบที่กำหนด
- รูปแบบพื้นฐาน:
<button x-on:event="action"></button>
- event: ชื่อของ Event เช่น
click
,mouseover
- action: โค้ดหรือฟังก์ชันที่ต้องการให้รันเมื่อ Event เกิดขึ้น
- event: ชื่อของ Event เช่น
2. การใช้ x-on:click
เพื่อจับ Event การคลิก
ตัวอย่างพื้นฐาน:
<div x-data="{ message: 'Click the button!' }">
<h1 x-text="message"></h1>
<button x-on:click="message = 'Button clicked!'">Click Me</button>
</div>
การทำงาน:
- เมื่อคลิกปุ่ม ข้อความใน
message
จะเปลี่ยนเป็น “Button clicked!” <h1>
จะอัปเดตข้อความโดยอัตโนมัติ
3. การย่อคำสั่ง x-on
เป็น @
ใน Alpine.js คุณสามารถย่อ x-on:event
เป็น @event
เพื่อเขียนโค้ดที่กระชับขึ้น:
<button @click="message = 'Button clicked!'">Click Me</button>
ให้ผลลัพธ์เหมือนกับการใช้ x-on:click
4. การใช้ Event อื่น ๆ
ตัวอย่าง: Event mouseover
และ mouseout
<div x-data="{ message: 'Hover over me!' }">
<h1 x-text="message"></h1>
<div
@mouseover="message = 'Mouse is over!'"
@mouseout="message = 'Mouse left!'"
style="width: 200px; height: 100px; background: lightblue;">
</div>
</div>
การทำงาน:
- เมื่อเมาส์เลื่อนเข้า:
message
จะเปลี่ยนเป็น “Mouse is over!” - เมื่อเมาส์เลื่อนออก:
message
จะเปลี่ยนเป็น “Mouse left!”
5. การส่งพารามิเตอร์ใน Event Handler
สามารถส่งพารามิเตอร์ไปยังฟังก์ชันได้ เช่น:
<div x-data="{ setMessage(message) { this.message = message }, message: '' }">
<h1 x-text="message"></h1>
<button @click="setMessage('Hello!')">Say Hello</button>
<button @click="setMessage('Goodbye!')">Say Goodbye</button>
</div>
การทำงาน:
- เมื่อคลิกปุ่มแรก:
message
จะเปลี่ยนเป็น “Hello!” - เมื่อคลิกปุ่มที่สอง:
message
จะเปลี่ยนเป็น “Goodbye!”
6. การใช้ Modifiers ใน x-on
Modifiers ช่วยปรับพฤติกรรมของ Event ได้สะดวก เช่น:
ตัวอย่าง:
<div x-data="{ count: 0 }">
<button @click.stop="count++">Increase Count</button>
<p x-text="'Count: ' + count"></p>
</div>
การทำงานของ Modifiers:
.stop
: หยุดการส่งต่อ Event ไปยังองค์ประกอบอื่นใน DOM.prevent
: ป้องกันพฤติกรรมเริ่มต้นของ Event เช่น การส่งฟอร์ม
ตัวอย่างเพิ่มเติม:
<form x-data="{ submitted: false }" @submit.prevent="submitted = true">
<button type="submit">Submit</button>
<p x-show="submitted">Form Submitted!</p>
</form>
การทำงาน:
.prevent
จะป้องกันฟอร์มจากการรีเฟรชหน้าเว็บ
7. การจับ Event ที่เกี่ยวข้องกับคีย์บอร์ด
ตัวอย่าง: ตรวจจับปุ่ม Enter
<div x-data="{ message: '' }">
<input
type="text"
placeholder="Press Enter"
@keydown.enter="message = 'Enter Pressed!'">
<p x-text="message"></p>
</div>
การทำงาน:
- เมื่อกดปุ่ม
Enter
,message
จะเปลี่ยนเป็น “Enter Pressed!”
8. การใช้ Event ร่วมกับฟังก์ชันภายใน
สามารถใช้ Event Handler ที่เรียกฟังก์ชันใน x-data
ได้ เช่น:
<div x-data="{ count: 0, increase() { this.count++ } }">
<h1 x-text="'Count: ' + count"></h1>
<button @click="increase()">Increase</button>
</div>
การทำงาน:
- เมื่อคลิกปุ่ม ฟังก์ชัน
increase
จะเพิ่มค่าcount
9. ข้อควรระวัง
- หากใช้ Event Modifiers เช่น
.stop
และ.prevent
ควรระวังการใช้งานที่อาจทำให้ Event อื่นไม่ทำงาน - ตรวจสอบว่า Event ที่จับใช่ Event ที่ต้องการหรือไม่ เช่น
click
,keyup
,submit
สรุป
ในบทนี้ คุณได้เรียนรู้วิธีจับ Event ด้วย x-on
รวมถึงการย่อคำสั่งด้วย @
การส่งพารามิเตอร์ การใช้ Modifiers และการประยุกต์ใช้กับ Event ที่ซับซ้อน ในบทถัดไป เราจะพูดถึง x-bind
เพื่อผูกค่ากับ Attributes ของ HTML!