Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 6: การจับ Event ด้วย x-on


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 เกิดขึ้น

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!