เนื้อหาในส่วนนี้ จะเป็นการทบทวนความรู้เก่า เป็นตัวอย่างการใช้งาน ajax
ในลํกษณะของการส่งข้อมูลจาก form แบบ ajax หรือไม่มีการ refresh หน้าเพจ
หลักการทดสอบ สร้างไฟล์ php สำหรับรับข้อมูลในตัวอย่างที่นี้ใช้ชื่อว่า getdata.php
โค้ดไฟล์ getdata.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); if(count($_POST)){ echo "<pre>"; print_r($_POST); echo "</pre>"; } ?>
โค้ดไฟล์ myform.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test form</title> <style type="text/css"> .mylabel{ display: inline-block; width: 150px; margin-bottom: 10px; } </style> </head> <body> <br><br> <div style="margin:auto;width:700px;"> <form name="myform1" id="myform1" action="" method="post"> <span class="mylabel">Name: </span> <input type="text" name="myname" id="myname" value=""> <br> <span class="mylabel">Password: </span> <input type="password" name="mypass" id="mypass" value=""> <br> <span class="mylabel">Sex: </span> <input type="radio" name="myradio" id="myradio1" value="male"> Male <input type="radio" name="myradio" id="myradio2" value="female"> female <br> <span class="mylabel">occupation: </span> <select name="myselect" id="myselect"> <option value="">Select occupation</option> <option value="programmer">programmer</option> <option value="designer">designer</option> </select> <br> <span class="mylabel">Description: </span> <textarea name="mydesc" id="mydesc" cols="30" rows="5"></textarea> <br> <span class="mylabel">newsletter: </span> <input type="checkbox" name="mycheckbox" id="mycheckbox" value="1"> via email <br> <span class="mylabel"></span> <input type="submit" name="mysubmit" id="mysubmit" value="Save"> <input type="reset" name="myreset" id="myreset" value="Reset"> </form> </div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </body> </html>
โค้ดไฟล์ script.js
$(function(){ // เมื่อ submit form id myform1 $("#myform1").on("submit",function(){ // เก็บชุดข้อมูลที่ต้องการส่งทั้งหมดไว้ในตัวแปร str var str=$("#myform1").serialize(); $.post("getdata.php",str,function(data){ // ส่งข้อมูลแบบ post console.log(data); // คืนค่า data จากข้อมูลที่แสดงในไฟล์ getdata.php }); return false; // ปิดการใช้งานการ submit form แบบปกติ }); });
จากรูปแบบการใช้งานข้างต้น เราจะเห็นว่าเป็นการส่งข้อมูลแบบ ajax เมื่อทำงาน
สำเร็จแล้ว เราสามารถกำหนดให้ทำงานเพิ่มเติม
ต่อไปจะแนะนำการ reset form หลังจาก submit ข้อมูลแบบ ajax เราจะใช้คำสั่ง
$("#myform1")[0].reset();
หรือแทรกในโค้ด script.js ได้ดังนี้
$(function(){ // เมื่อ submit form id myform1 $("#myform1").on("submit",function(){ // เก็บชุดข้อมูลที่ต้องการส่งทั้งหมดไว้ในตัวแปร str var str=$("#myform1").serialize(); $.post("getdata.php",str,function(data){ // ส่งข้อมูลแบบ post console.log(data); // คืนค่า data จากข้อมูลที่แสดงในไฟล์ getdata.php $("#myform1")[0].reset(); // reset form }); return false; // ปิดการใช้งานการ submit form แบบปกติ }); });
การ reset form นอกจากใช้คำสั่งดังกล่าวแล้ว เรายังสามารถใช้งาน
<input type="reset" name="myreset" id="myreset" value="Reset">
ทดสอบ ลองพิมพ์ข้อมูลลงใน form จากนั้นกดปุ่ม reset
จากตัวอย่างจะเห็นว่า เมื่อเรากดปุ่ม reset ค่าข้อมูลจะถูกล่างค่า สำหรับการกรอกข้อมูลใหม่
ทีนี้มาดูกรณีที่สอง เงื่อนไขจะแตกต่างไป คือ ข้อมูลใน form บางรายการ มีการกำหนด
ค่ามาตั้งแต่ต้น การ reset ข้อมูลแบบปกติจะไม่สามารถใข้งานได้
โค้ดไฟล์ myform.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test form</title> <style type="text/css"> .mylabel{ display: inline-block; width: 150px; margin-bottom: 10px; } </style> </head> <body> <br><br> <div style="margin:auto;width:700px;"> <form name="myform2" id="myform2" action="" method="post"> <span class="mylabel">Name: </span> <input type="text" name="myname" id="myname" value="ninenik"> <br> <span class="mylabel">Password: </span> <input type="password" name="mypass" id="mypass" value="ninenik"> <br> <span class="mylabel">Sex: </span> <input type="radio" name="myradio" id="myradio1" value="male" checked> Male <input type="radio" name="myradio" id="myradio2" value="female"> female <br> <span class="mylabel">occupation: </span> <select name="myselect" id="myselect"> <option value="">Select occupation</option> <option value="programmer" selected>programmer</option> <option value="designer">designer</option> </select> <br> <span class="mylabel">Description: </span> <textarea name="mydesc" id="mydesc" cols="30" rows="5">ninenik.com</textarea> <br> <span class="mylabel">newsletter: </span> <input type="checkbox" name="mycheckbox" id="mycheckbox" value="1" checked> via email <br> <span class="mylabel"></span> <input type="submit" name="mysubmit" id="mysubmit" value="Save"> <input type="reset" name="myreset" id="myreset" value="Reset"> </form> </div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </body> </html>
ทดสอบ กดปุ่ม reset ซึ่งจะไม่มีอะไรเกิดขึ้นในการ reset form
ดังนั้นในส่วนนี้ เราจะมาประยุกต์สร้างฟังก์ชั่นสำหรับ reset กรณีพิเศษนี้
โดยสามารถกำหนดการทำงานให้กับการ reset form เพิ่มเตืมเข้าไปได้ดังนี้
$(function(){ // เมื่อ submit form id myform1 $("#myform1").on("submit",function(){ // เก็บชุดข้อมูลที่ต้องการส่งทั้งหมดไว้ในตัวแปร str var str=$("#myform3").serialize(); $.post("getdata.php",str,function(data){ // ส่งข้อมูลแบบ post console.log(data); // คืนค่า data จากข้อมูลที่แสดงในไฟล์ getdata.php $("#myform3")[0].reset(); // reset form }); return false; // ปิดการใช้งานการ submit form แบบปกติ }); // เมื่อ form ถูก reset ด้วยปุ่ม reset $("#myform3").on("reset",function(){ // ค้นหา input ทั้งหมดใน form $(this).find(":input").each(function(i,k){ var typeObj=$(k)[0].type; // หาประเภทของ รnput if(typeObj=="text" || typeObj=="password"){ $(k).removeAttr("value"); } if(typeObj=="select-one"){ $(k).find("option:selected").removeAttr("selected"); } if(typeObj=="radio" || typeObj=="checkbox"){ $(k).removeAttr("checked"); } if(typeObj=="textarea"){ $(k).text(""); } // console.log(typeObj); }); }); });
ทดสอบ กดปุ่ม reset จะเห็นการทำงานของ การประยุกต์