Dev to webs {Coding…}

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

บทที่ 18: การใช้ x-model กับ Select Dropdown


1. ความเข้าใจเกี่ยวกับ x-model กับ Select Dropdown

x-model ใช้สำหรับผูกค่าใน Select Dropdown โดยค่าที่ผู้ใช้เลือกจะถูกเก็บในตัวแปร State และสามารถใช้ค่าดังกล่าวในส่วนอื่น ๆ ของหน้าเว็บได้แบบเรียลไทม์

  • ใช้ร่วมกับ <select> และ <option> เพื่อให้ Dropdown Dynamic
  • รองรับทั้ง Single Select และ Multiple Select

2. การใช้งาน x-model กับ Select Dropdown แบบ Single Select

ตัวอย่างพื้นฐาน:
<div x-data="{ selectedCountry: '' }">
    <label for="country">Select your country:</label>
    <select id="country" x-model="selectedCountry">
        <option value="">Please select</option>
        <option value="Thailand">Thailand</option>
        <option value="Japan">Japan</option>
        <option value="USA">USA</option>
    </select>
    <p>Your selected country: <span x-text="selectedCountry || 'None'"></span></p>
</div>

คำอธิบาย:

  • x-model="selectedCountry" ผูกค่าที่เลือกจาก <select> กับตัวแปร selectedCountry
  • ค่าใน <option> จะถูกเก็บใน selectedCountry
  • <span x-text="selectedCountry || 'None'"> แสดงค่าที่เลือก หรือแสดง None หากยังไม่ได้เลือก

3. การใช้งาน x-model กับ Select Dropdown แบบ Dynamic

ตัวอย่าง: ใช้ข้อมูลจาก Array
<div x-data="{ countries: ['Thailand', 'Japan', 'USA'], selectedCountry: '' }">
    <label for="dynamicCountry">Select your country:</label>
    <select id="dynamicCountry" x-model="selectedCountry">
        <option value="">Please select</option>
        <template x-for="country in countries" :key="country">
            <option x-text="country" :value="country"></option>
        </template>
    </select>
    <p>Your selected country: <span x-text="selectedCountry || 'None'"></span></p>
</div>

คำอธิบาย:

  • countries คือ Array ที่เก็บรายการประเทศ
  • ใช้ x-for สร้าง <option> แบบ Dynamic
  • ค่าใน <option> ถูกเก็บในตัวแปร selectedCountry

4. การใช้งาน x-model กับ Select Dropdown แบบ Multiple Select

ตัวอย่าง:
<div x-data="{ selectedFruits: [] }">
    <label for="fruits">Select your favorite fruits:</label>
    <select id="fruits" x-model="selectedFruits" multiple>
        <option value="Apple">Apple</option>
        <option value="Banana">Banana</option>
        <option value="Cherry">Cherry</option>
    </select>
    <p>Selected fruits:</p>
    <ul>
        <template x-for="fruit in selectedFruits" :key="fruit">
            <li x-text="fruit"></li>
        </template>
    </ul>
</div>

คำอธิบาย:

  • ใช้ x-model="selectedFruits" กับ <select multiple>
  • ผู้ใช้สามารถเลือกหลายตัวเลือกพร้อมกัน
  • ค่าใน selectedFruits จะเก็บเป็น Array ของตัวเลือกที่เลือกไว้

5. การใช้ x-model กับ Select Dropdown ที่มีค่าซับซ้อน

ตัวอย่าง: ใช้ Object เป็นค่า
<div x-data="{ selectedPlan: {}, plans: [
    { id: 1, name: 'Basic Plan' },
    { id: 2, name: 'Premium Plan' }
] }">
    <label for="plan">Select your plan:</label>
    <select id="plan" x-model="selectedPlan">
        <option value="">Please select</option>
        <template x-for="plan in plans" :key="plan.id">
            <option :value="plan" x-text="plan.name"></option>
        </template>
    </select>
    <p x-text="selectedPlan.name ? `Selected Plan: ${selectedPlan.name}` : 'No plan selected'"></p>
</div>

คำอธิบาย:

  • ใช้ Object (plan) เป็นค่าใน <option>
  • ตัวเลือกที่เลือกจะถูกเก็บในตัวแปร selectedPlan
  • แสดงชื่อของแผนที่เลือกโดยอ้างอิงจาก selectedPlan.name

6. การใช้ Modifiers กับ Select Dropdown

Modifiers สามารถใช้ร่วมกับ x-model เพื่อปรับพฤติกรรม เช่น:

  • .number: แปลงค่าที่ได้จาก <option> เป็นตัวเลข
  • .trim: ตัดช่องว่างหน้าและหลังของค่า
ตัวอย่าง: .number
<div x-data="{ selectedAgeGroup: 0 }">
    <label for="age">Select your age group:</label>
    <select id="age" x-model.number="selectedAgeGroup">
        <option value="0">Select your age group</option>
        <option value="18">18-25</option>
        <option value="26">26-35</option>
        <option value="36">36-45</option>
    </select>
    <p>Your selected age group: <span x-text="selectedAgeGroup || 'None'"></span></p>
</div>

คำอธิบาย:

  • .number แปลงค่าที่เลือกเป็นตัวเลข
  • ค่า selectedAgeGroup จะเก็บเป็นตัวเลข เช่น 18, 26

7. การตรวจสอบค่าที่เลือกใน Select Dropdown

ตัวอย่าง:
<div x-data="{ selectedOption: '' }">
    <label for="options">Choose an option:</label>
    <select id="options" x-model="selectedOption">
        <option value="">Select an option</option>
        <option value="Option 1">Option 1</option>
        <option value="Option 2">Option 2</option>
    </select>
    <p x-show="!selectedOption">Please select an option.</p>
    <p x-show="selectedOption" x-text="`You selected: ${selectedOption}`"></p>
</div>

คำอธิบาย:

  • แสดงข้อความเตือนหากยังไม่ได้เลือกตัวเลือก
  • เมื่อเลือกแล้ว แสดงข้อความพร้อมค่าที่เลือก

8. ข้อควรระวังในการใช้ x-model กับ Select Dropdown

  1. ค่าใน <option> ควรเป็นเอกลักษณ์:
    • เพื่อป้องกันความสับสนหรือการเลือกผิด
  2. กำหนดค่าเริ่มต้นใน State:
    • ควรตั้งค่าเริ่มต้นใน State ให้สอดคล้องกับค่าที่ต้องการใน Dropdown
  3. การจัดการค่าซับซ้อน:
    • หากใช้ Object หรือ Array ควรตรวจสอบโครงสร้างข้อมูลให้ถูกต้อง

สรุป

ในบทนี้ คุณได้เรียนรู้การใช้ x-model กับ Select Dropdown ทั้งแบบ Single Select และ Multiple Select พร้อมตัวอย่างการใช้ค่าซับซ้อน เช่น Object และการปรับพฤติกรรมด้วย Modifiers ในบทถัดไป เราจะพูดถึงการใช้ x-effect เพื่อจัดการค่าที่เปลี่ยนแปลงใน State แบบอัตโนมัติ!