Dev to webs {Coding…}

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

บทที่ 17: การใช้ x-model กับ Checkbox และ Radio Button


1. ความเข้าใจเกี่ยวกับ x-model กับ Checkbox และ Radio

x-model ช่วยจัดการค่าของ Checkbox และ Radio Button อย่างง่ายดาย โดยผูกค่าระหว่างตัวแปร State กับอินพุตประเภทเหล่านี้

  • Checkbox:
    • ใช้เพื่อเลือกค่าที่เป็น true/false หรือ Array (ในกรณีที่มีหลายตัวเลือก)
  • Radio Button:
    • ใช้เลือกค่าที่เฉพาะเจาะจงจากกลุ่มตัวเลือก

2. การใช้ x-model กับ Checkbox

ตัวอย่าง 1: Checkbox เดี่ยว
<div x-data="{ agree: false }">
    <label>
        <input type="checkbox" x-model="agree">
        I agree to the terms and conditions
    </label>
    <p x-text="agree ? 'Agreed' : 'Not Agreed'"></p>
</div>

คำอธิบาย:

  • x-model="agree" ผูกค่า agree กับสถานะของ Checkbox
  • ค่า agree จะเป็น true เมื่อ Checkbox ถูกเลือก และ false เมื่อไม่ถูกเลือก

ตัวอย่าง 2: Checkbox หลายตัวเลือก (Array)
<div x-data="{ selectedFruits: [] }">
    <label>
        <input type="checkbox" value="Apple" x-model="selectedFruits">
        Apple
    </label>
    <label>
        <input type="checkbox" value="Banana" x-model="selectedFruits">
        Banana
    </label>
    <label>
        <input type="checkbox" value="Cherry" x-model="selectedFruits">
        Cherry
    </label>
    <p>Selected fruits: <span x-text="selectedFruits.join(', ')"></span></p>
</div>

คำอธิบาย:

  • x-model="selectedFruits" ผูกค่า selectedFruits เป็น Array
  • เมื่อเลือก Checkbox ค่าใน value จะถูกเพิ่มเข้าใน selectedFruits
  • แสดงรายการผลไม้ที่เลือกใน <span>

3. การใช้ x-model กับ Radio Button

ตัวอย่าง 1: การเลือกเพียงหนึ่งตัวเลือก
<div x-data="{ gender: '' }">
    <label>
        <input type="radio" name="gender" value="Male" x-model="gender">
        Male
    </label>
    <label>
        <input type="radio" name="gender" value="Female" x-model="gender">
        Female
    </label>
    <p>Your gender is: <span x-text="gender"></span></p>
</div>

คำอธิบาย:

  • x-model="gender" ผูกค่า gender กับ Radio Button
  • ค่า gender จะถูกตั้งค่าเป็น value ของ Radio Button ที่ถูกเลือก

ตัวอย่าง 2: การใช้ Radio Button กับค่าที่ซับซ้อน
<div x-data="{ selectedPlan: {} }">
    <label>
        <input type="radio" name="plan" :value="{ id: 1, name: 'Basic' }" x-model="selectedPlan">
        Basic Plan
    </label>
    <label>
        <input type="radio" name="plan" :value="{ id: 2, name: 'Premium' }" x-model="selectedPlan">
        Premium Plan
    </label>
    <p x-text="`Selected Plan: ${selectedPlan.name || 'None'}`"></p>
</div>

คำอธิบาย:

  • ใช้ :value เพื่อกำหนดค่าที่เป็น Object
  • เมื่อ Radio Button ถูกเลือก ค่า selectedPlan จะกลายเป็น Object ที่สอดคล้องกับ value

4. การใช้ x-model กับ Checkbox และ Radio ในการประยุกต์ใช้งาน

ตัวอย่าง: ฟอร์มที่มี Checkbox และ Radio Button
<div x-data="{ preferences: { newsletter: false, notifications: '', } }">
    <h3>Preferences</h3>
    
    <label>
        <input type="checkbox" x-model="preferences.newsletter">
        Subscribe to Newsletter
    </label>
    <p x-text="preferences.newsletter ? 'Subscribed' : 'Not Subscribed'"></p>

    <h4>Notification Method</h4>
    <label>
        <input type="radio" name="notifications" value="Email" x-model="preferences.notifications">
        Email
    </label>
    <label>
        <input type="radio" name="notifications" value="SMS" x-model="preferences.notifications">
        SMS
    </label>
    <p x-text="preferences.notifications ? `Notifications via: ${preferences.notifications}` : 'No preference selected'"></p>
</div>

คำอธิบาย:

  • preferences.newsletter ผูกกับ Checkbox เพื่อเลือกสมัครรับข่าวสาร
  • preferences.notifications ผูกกับ Radio Button เพื่อเลือกวิธีรับการแจ้งเตือน

5. ข้อควรระวังในการใช้ x-model กับ Checkbox และ Radio

  1. การตั้งชื่อ Name ใน Radio:
    • Radio Button ในกลุ่มเดียวกันต้องมี Attribute name เหมือนกัน
  2. ค่าของ Checkbox:
    • ต้องกำหนด value ที่ชัดเจนเมื่อใช้กับ Array
  3. การใช้ Modifiers:
    • สามารถใช้ Modifiers เช่น .lazy, .number, .trim ได้ในกรณีที่ต้องการปรับพฤติกรรม

6. การใช้ Modifiers กับ Checkbox และ Radio

ตัวอย่าง: .number
<div x-data="{ ageGroup: 0 }">
    <label>
        <input type="radio" name="age" value="18" x-model.number="ageGroup">
        18-25
    </label>
    <label>
        <input type="radio" name="age" value="26" x-model.number="ageGroup">
        26-35
    </label>
    <p x-text="`Selected age group: ${ageGroup}`"></p>
</div>

คำอธิบาย:

  • .number แปลงค่าที่ได้รับจาก Radio Button เป็นตัวเลข

7. สรุป

ในบทนี้ คุณได้เรียนรู้วิธีใช้ x-model กับ Checkbox และ Radio Button เพื่อจัดการค่าของอินพุตในฟอร์ม ตัวอย่างที่นำเสนอครอบคลุมการใช้งานตั้งแต่พื้นฐานไปจนถึงการประยุกต์ใช้กับข้อมูลที่ซับซ้อน ในบทถัดไป เราจะพูดถึงการใช้ x-model กับ Select และ Dropdown เมนู!