แนวทางและโค้ดตัวอย่างต่อไปนี้ เป็นการประยุกต์ใช้งาน listbox หรือ
แท็ก select ที่มีความสัมพันธ์ของข้อมูล มากกว่า 2 รายการ ยกตัวอย่าง
เช่น การเลือกจังหวัด เลือกอำเภอ เลือกตำบล
หรือ การเลือกคณะ เลือกสาขา เลือกวิชา
หรือ เลือกยี่ห้อ เลือกประเภท และเลือก ขนาด / สี
แบบนี้เป็นต้น
เนื้อหานี้จะประยุกต์จากบทความเก่า เรื่อง
กำหนดรายการใน listbox ที่ 2 จากเงื่อนไขการเลือก listbox ที่ 1 ด้วย ajax ใน jquery อย่างง่าย
https://www.ninenik.com/content.php?arti_id=207 via @ninenik
ดังนั้นการใช้งานกับฐานข้อมูล สามารถดูจากบทความข้างต้น ได้
สำหรับในที่นี้จะใช้วิธีนำเสนอ เป็นแนวทาง สามารถนำไปประยุกต์หรือดัด
แปลงเพิ่มเติมได้ตามความเหมาะสม
ตัวอย่าง
ไฟล์ทดสอบ four_listbox.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .mylabel{ display: inline-block; width: 150px; margin-bottom: 10px; } </style> </head> <body> <div style="margin:auto;width:80%;"> <form id="form1" name="form1" method="post" action=""> <br> <br> <span class="mylabel">ตัวเลือกที่1: </span> <select name="list1" id="list1"> <option value="">เลือกรายการ</option> <option value="1">เลือกรายการ 1</option> <option value="2">เลือกรายการ 2</option> <option value="3">เลือกรายการ 3</option> <option value="4">เลือกรายการ 4</option> <option value="5">เลือกรายการ 5</option> </select> <br> <span class="mylabel">ตัวเลือกที่2: </span> <select name="list2" id="list2"> <option value="">เลือกรายการ</option> </select> <br> <span class="mylabel">ตัวเลือกที่3: </span> <select name="list3" id="list3"> <option value="">เลือกรายการ</option> </select> <br> <span class="mylabel">ตัวเลือกที่4: </span> <select name="list4" id="list4"> <option value="">เลือกรายการ</option> </select> <br> <br> <span class="mylabel"></span> <input type="submit" name="button" id="button" value="Submit" /> <br> </form> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> $(function(){ // เมื่อเปลี่ยนค่าของ select id เท่ากับ list1 $("select#list1").change(function(){ // ส่งค่า ตัวแปร list1 มีค่าเท่ากับค่าที่เลือก ส่งแบบ get ไปที่ไฟล์ data_for_list2.php $.get("data_for_list2.php",{ list1:$(this).val() },function(data){ // คืนค่ากลับมา $("select#list2").html(data); // นำค่าที่ได้ไปใส่ใน select id เท่ากับ list2 $("select#list2").trigger("change"); // อัพเดท list2 เพื่อให้ list2 ทำงานสำหรับรีเซ็ตค่า }); }); // เมื่อเปลี่ยนค่าของ select id เท่ากับ list2 $("select#list2").change(function(){ // ส่งค่า ตัวแปร list2 มีค่าเท่ากับค่าที่เลือก ส่งแบบ get ไปที่ไฟล์ data_for_list3.php $.get("data_for_list3.php",{ list2:$(this).val() },function(data){ // คืนค่ากลับมา $("select#list3").html(data); // นำค่าที่ได้ไปใส่ใน select id เท่ากับ list3 $("select#list3").trigger("change"); // อัพเดท list3 เพื่อให้ list3 ทำงานสำหรับรีเซ็ตค่า }); }); // เมื่อเปลี่ยนค่าของ select id เท่ากับ list3 $("select#list3").change(function(){ // ส่งค่า ตัวแปร list3 มีค่าเท่ากับค่าที่เลือก ส่งแบบ get ไปที่ไฟล์ data_for_list4.php $.get("data_for_list4.php",{ list3:$(this).val() },function(data){ // คืนค่ากลับมา $("select#list4").html(data); // นำค่าที่ได้ไปใส่ใน select id เท่ากับ list4 $("select#list4").trigger("change"); // อัพเดท list4 เพื่อให้ list4 ทำงานสำหรับรีเซ็ตค่า }); }); }); </script> </body> </html>
ไฟล์ data_for_list2.php
<?php header("Content-type:text/html; charset=UTF-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); ?> <?php if(isset($_GET['list1']) && $_GET['list1']!=""){?> <option value="">เลือกรายการ</option> <?php for($i=1;$i<=$_GET['list1'];$i++){ ?> <option value="<?=$i?>">เลือกรายการ <?=$i?></option> <?php } ?> <?php }else{ ?> <option value="">เลือกรายการ</option> <?php } ?>
ไฟล์ data_for_list3.php
<?php header("Content-type:text/html; charset=UTF-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); ?> <?php if(isset($_GET['list2']) && $_GET['list2']!=""){?> <option value="">เลือกรายการ</option> <?php for($i=1;$i<=$_GET['list2'];$i++){ ?> <option value="<?=$i?>">เลือกรายการ <?=$i?></option> <?php } ?> <?php }else{ ?> <option value="">เลือกรายการ</option> <?php } ?>
ไฟล์ data_for_list4.php
<?php header("Content-type:text/html; charset=UTF-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); ?> <?php if(isset($_GET['list3']) && $_GET['list3']!=""){?> <option value="">เลือกรายการ</option> <?php for($i=1;$i<=$_GET['list3'];$i++){ ?> <option value="<?=$i?>">เลือกรายการ <?=$i?></option> <?php } ?> <?php }else{ ?> <option value="">เลือกรายการ</option> <?php } ?>
สำหรับไฟล์ data_for_list(x).php นั้น ตามตัวอย่างจะทำแยกเพื่อให้เห็น
แนวทางชัดเจน ส่วนสำหรับ การไปใช้งานงาน อาจจะใข้เป็นไฟล์เดียวก็ได้
แล้วกำหนด if else เป็นเงื่อนไขสำหรับข้อมูลแทน