ทำ Autocomplete ด้วย jQuery Autocomplete Plugin

July 2009 | By platoosom | jQuery | Tags : , , , | อ่าน : 1050

อ่านกันหรือยัง

วันนี้ผมจะมานำเสนอ การใช้งาน jQuery Autocomplete Plugin ลองคลิก Live Demo ดูครับ คุณสมบัติของปลั๊กอินตัวนี้ มากมายนัก แต่ผมจะนำเสนอ แบบที่ใช้งานง่ายที่สุด ให้ท่าน ถ้าเกิดว่าท่าน อยากจะใช้งานมันแบบสุดๆ ปรับแต่งมันแบบสุดๆ ก็คงต้องขอให้ท่านศึกษาจากเว็บไซต์ ต้นฉบับเขา ราตรียาวนานฝันยุ่งเหยิง เริ่มต้นกันเลยดีกว่า

เริ่มต้นที่ดาวน์โหลดตัวปลั๊กอินมาก่อน Download

หลังจากดาวน์โหลดมาแล้วและแตกซิปออก ในนั้นจะมีตัวอย่างการใช้งานอยู่ ท่านสามารถศึกษาจากตัวอย่าง ได้อีกทางหนึ่ง

เขียนโค้ดแรก โดยการ include ไฟล์ที่จำเป็นเข้ามา

<script type="text/javascript" src="jquery-autocomplete/lib/jquery.js"></script>
<script type="text/javascript" src="jquery-autocomplete/jquery.autocomplete.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.ajaxQueue.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/thickbox-compressed.js"></script>
<link rel="stylesheet" href="jquery-autocomplete/lib/thickbox.css" />
<link rel="stylesheet" href="jquery-autocomplete/jquery.autocomplete.css" />

สร้าง textbox สำหรับใช้งาน

<input name="month" id="month" type="text" />

สร้าง Autocomplete ให้กับ textbox

<script type="text/javascript">
$(document).ready(function(){
 
	var str_month = "มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม";
	var arr_month = str_month.split(" ");
 
	$("#month").autocomplete( arr_month );
 
})
</script>

แค่เราส่ง array เป็นพารามิเตอร์เข้าไป เท่านี้ก็เรียบร้อย ส่วน array ท่านจะสร้างด้วยวิธีใด ก็สุดแล้วแต่ละครับ

$("#month").autocomplete( arr_month );

โค้ดทั้งหมด

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.js"></script>
<script type="text/javascript" src="jquery-autocomplete/jquery.autocomplete.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.ajaxQueue.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/thickbox-compressed.js"></script>
<link rel="stylesheet" href="jquery-autocomplete/lib/thickbox.css" />
<link rel="stylesheet" href="jquery-autocomplete/jquery.autocomplete.css" />
<title>Autocomplete jQuery Plugin</title>
<script type="text/javascript">
$(document).ready(function(){
 
	var str_month = "มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม";
	var arr_month = str_month.split(" ");
 
	$("#month").autocomplete( arr_month );
 
})
</script>
</head>
<body>
<input name="month" id="month" type="text" />
</body>
</html>

Live Demo

เพียงเท่านี้เองครับ เห็นมั้ยครับ ว่าวิธีการใช้งานนั้น ง่ายแสนง่าย

โค้ดด้านล่าง จะแสดงวิธีการใช้งานแบบ Advance ขึ้นมานึดนึง

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.js"></script>
<script type="text/javascript" src="jquery-autocomplete/jquery.autocomplete.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/jquery.ajaxQueue.js"></script>
<script type="text/javascript" src="jquery-autocomplete/lib/thickbox-compressed.js"></script>
<link rel="stylesheet" href="jquery-autocomplete/lib/thickbox.css" />
<link rel="stylesheet" href="jquery-autocomplete/jquery.autocomplete.css" />
<title>Autocomplete jQuery Plugin</title>
<script type="text/javascript">
$(document).ready(function(){
 
	var str_month = "มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม";
	var arr_month = str_month.split(" ");
 
	$("#month").autocomplete( arr_month , {
		multiple: true, //ยอมให้ป้อนได้หลายค่า
		mustMatch: true, //ป้อนได้เฉพาะค่าที่เตรียมไว้ให้
		autoFill: true, //เติมคำอัตโนมัติ
		matchContains: true //หาค่าที่ไม่ใช่ตัวเริ่มต้น
	});
 
})
 
</script>
</head>
<body>
<input name="month" id="month" type="text" />
</body>
</html>

Live Demo

ดาวน์โหลดโค้ดตัวอย่าง : Download

ข้อมูลเพิ่มเติม : http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/

บทความน่าสนใจ

  1. jQuery – autocomplete
  2. มหัศจรรย์แห่งทูลทิป clueTip : A jQuery Plugin
  3. jQuery – Farbtastic plugin
  4. ฟังก์ชั่นแปลงตัวเลขเดือน เป็นตัวหนังสือ
  5. สร้างเพจเลย์เอ้าท์ ด้วย UI.Layout jQuery plugin

ผู้เขียน: วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย

เว็บไซต์ :http://www.select2web.com

งานเล็กๆก็ยิ่งใหญ่ได้ ถ้าอยู่ในที่ๆเหมาะสม

มี 15 ความเห็น ในบทความเรื่อง “ทำ Autocomplete ด้วย jQuery Autocomplete Plugin”

  1. minddezign says:

    แล้วหากผมมีข้อมูลอยู่ในอยู่ใน table ใน mysql แล้วผม query data เข้ามาใส่แทนใน JavaScript ได้อย่างงัยอ่ะครับเช่นผมมีเดือนต่างๆเก็บไว้ที่ database อ่ะครับ

    พอดีผมเองไม่ค่อยได้ใช้ Javascript + php อ่ะครับ แต่จะลองทำก่อนไม่รู้ว่าจะได้เป่า หากได้เดียวจะเอามาให้ตรวจดูครับ JavaScript ยังงูๆปลาๆเลยอ่ะครับ

    แต่หากพี่ทำได้ รบกวนช่วยยกตัวอย่างด้วยครับ ขอบคุณครับผม

  2. platoosom says:

    ใช้คำสั่ง echo ธรรมดาเลย

    var str_month = “< ?php loop and echo value from database here?>“;

    แทรกโครมเข้าไปเลยตรงนี้ วนลูปดึงเอาเดือนจากดาต้าเบส echo ลงมาเลย คำมันก็จะเรียง ตามแบบที่ต้องการ พอมาถึงฝั่ง javascript มันก็ทำของมันเอง

    ผมขออธิบาย php กับ javascript นิดนึงนะ

    php ทำงานบนเซิฟเวอร์ ตอนมันทำงานจาวาสคริปต์ยังไม่ถึงคิวจะทำ ถ้าเรา echo แท็ก html ออกมา มันก็เป็น html echo javascript ออกมา มันก็เป็นจาวาสคริปต์

    ส่วน javascript ทำงานฝั่งไคลเอนท์ ถ้ามันเห็นข้อความ ที่ขึ้นต้นด้วย <script> เมื่อไร มันจะเข้าใจทันทีว่า นั่นคำสั่งของตัวมัน

    เพราะฉะนั้นการเขียนปนกัน เราก็แค่จินตนาการถึง จาวาสคริปต์ รูปสำเร็จ แล้วเราก็ให้ php ช่วย echo ค่าตามนั้น ง่ายๆ

  3. minddezign says:

    ขอบคุณครับ เดียวลองดู่ก่อนครับ

  4. minddezign says:

    ลองทำแหล่ะครับได้แหล่ะ แต่มันยากที่ผมใช้ javascript ไปเรียกการใช้งานของ php ได้อย่างงัย แต่ก็ลองถูๆไถๆดู ก็ได้ครับแต่ไม่รู้ว่าจะถูกหลักการไหม
    ** แต่อยากรู้ว่าจะให้ javascript ไปเรียก php ที่เรา้เขียนไว้ได้อย่างงัยครับ

    อันนี้โค๊ดที่ผมทำก็ออกน่ะครับ ใช้ได้ปกติ
    ==================================================
    db_connect(DB_SERVER_HOST, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_SERVER_DATABASE);
    # Mode SQL Command : Select for count data in condition
    $sql = ” SELECT “;
    $sql .= ” id, “;
    $sql .= ” name “;
    $sql .= ” FROM “;
    $sql .= TABLE_MONTH;
    # Execute query command
    $res['select_data'] = $conn_mysql->query($sql);
    # Set variable type array
    $arr['data_detail'] = array();
    $arr_month = array();
    # Loop data in to variable : Fetch a result row as an associative array
    while ($arr['data_detail'] = $conn_mysql->fetch_row($res['select_data'])) {
    # Define variable for use easy
    $id = $arr['data_detail']['id'];
    $name = $arr['data_detail']['name'];
    # Push one or more elements onto the end of array : เพิ่มค่าเข้าไปใน Array มันก็จะวนต่อกันไปเรื่อยๆ
    array_push($arr_month, $name);
    } // end while
    # Close the database
    $conn_mysql->db_close();
    /*
    echo “

    ";
    	print_r($arr_month);
    	echo "

    “;
    */
    ?>
    <?php
    # นับจำนวนค่าทั้งหมดที่อยู่ใน array
    $count_array = count($arr_month);
    //echo "มีจำนวนทั้งหมด : " . $count_array;
    //echo "”;
    # กำหนดค่าเริ่มต้น
    $seq = 0;
    # วนลูปแสดงค่าที่อยู่ใน array ออกมา
    foreach ($arr_month as $key=>$val) {
    # เพิ่มค่าที่ละ 1
    $seq++;
    # แสดงค่าออกมา
    echo $val;
    # ตรวจสอบ : หากไม่ใช่ตัวสุดท้ายก็ให้แสดง “,” ต่อท้าย แต่หากเป็นตัวสุดท้ายไม่ต้องแสดง “,”
    if ($seq != $count_array) {
    echo “,”;
    } // end if
    } // end foreach
    ?>

    Autocomplete jQuery Plugin

    $(document).ready(function(){
    // ตรงนี้ไป copy code php ที่เขียนไว้ข้างบนเอามาใส่ใน JavaScript แต่อยากรู้ว่าจะให้ JavaScript ไปเรียกใช้งาน php ที่เขียนไว้ได้อย่างงัย
    var str_month = ‘$val) {$seq++;echo $val; if ($seq != $count_array) {echo ‘,’;}}?>’;
    var arr_month = str_month.split(“,”);

    $(“#month”).autocomplete( arr_month );

    })

    จงพิมพ์ ก ไก่ หรือชื่อเดือนไทย

    =================================================
    ลองทำแบบมั่วๆเอา 555

  5. minddezign says:

    อีกเรื่องครับ

    หากผมจะให้มัน ค้นหา(Search) มากกว่าที่จะค้นหาคำแรกของเดือน คือผมต้องการค้นหาคำว่า “คม” ก็จะแสดงคำเดือนทั้งหมดที่มี คม ออกมาน่ะครับ ทำอย่างไรครับ

  6. minddezign says:

    ผมจะให้มันค้นหาคำว่า คม แทนทีจะให้มันหาคำแรกทำอย่างไรดีครับ

  7. platoosom says:

    ปรับปรุงโค้ดให้ ของเ่ด่นมันเยิ่นเย้อ และไม่จำเป็นต้องวนลูป แล้วเช็กว่าเป็นตัวท้ายหรือเปล่า แค่ใช้คำสั่ง implode ก็พอ
    < ?php
    $str_month = implode( ',' , $arr_month );
    ?>

    จะได้สตริงที่มี , คั่นโดยไม่ต้องวนลูปอะไรเลย จาก 9 บรรทัด เหลือบรรทัด เดียว แล้วตอนเขียนแทรกลงใน จาวาสคริปต์ ก็แทรกอย่างนี้ครับ

    var str_month = “< ?php echo $str_month ;?>“;
    var arr_month = str_month.split(“,”);

  8. platoosom says:

    ส่วนที่ถามว่าอยากจะให้มันค้นหาคำว่า คมแทนที่ จะหาจากตัวแรก ทำได้ครับผม ลองดูตัวอย่าง

    http://jquery.bassistance.de/autocomplete/demo/

    ลองพิมพ์ ch ในช่อง Single Bird (remote): จะเห็นว่ามันทำได้อย่างที่เด่นต้องการ

    ส่วนทำอย่างไรนั้น เอ่อ… คงต้องศึกษาเพิ่มเติมจากเว็บเขานั่นแหละครับ ผมเองก็ใช้มันแค่ง่ายๆ เลยไม่ได้ศึกษาอย่างที่เด่นต้องการ

  9. minddezign says:

    ขอบคุณครับ ผมรู้แหล่ะครับว่าจะ Search อย่างไรครับ หาตั้งนานแน่ะครับ แจ๋วๆจริงๆครับผม ผมอยากจะเรียนรู้พวก Java เพิ่มเติมมั่ง อยากเขียนพวก Ajax + JavaScript ตอนนี้เรียน Java แบบเล็กๆอยู่ครับผม

    ขอบคุณครับสำหรับความรู้ดีๆครับ

  10. mrsitti says:

    ขอบคุณทั้งท่านผู้ถาม และท่านผู้ตอบที่แสนใจดี

    เป็นกำลังใจให้นะครับ

  11. xxx says:

    ผมจะให้มันค้นหาคำว่า คม แทนทีจะให้มันหาคำแรกทำอย่างไรดีครับ
    $(“#month”).autocomplete( arr_month , {
    multiple: true, //ยอมให้ป้อนได้หลายค่า
    mustMatch: true, //ป้อนได้เฉพาะค่าที่เตรียมไว้ให้
    autoFill: true, //เติมคำอัตโนมัติ
    matchContains: true //หาค่าที่ไม่ใช่ตัวเริ่มต้น
    });

  12. music says:

    ผมลองแล้วอ่ะครับ ถ้าใช้แบบ multiple มันจะไม่ support ie 8 ดูจาก demo ก็ไม่ดี งงมากคับ http://jquery.bassistance.de/autocomplete/demo/

  13. ผ่านมา says:

    แจ่มครับ

  14. bank says:

    ถ้ามีข้อมูลเยอะๆแล้วต้องการให้มีิตัวเลื่อนขึ้นเลื่อนลงเหมือนรูปตัวอย่างอันบนสุดต้องทำยังไงคับ

  15. ภฤศ says:

    ก่อนอื่นต้องขอขอบคุณมากเลยครับ เป็นประโยชน์มากๆเลย

    และมีคำถามคือถ้าต้องการ เพิ่ม List มากกว่า 1 อันทำยังไงครับ

    ขอบคุณครับ

แสดงความเห็น

ชื่อ *
Email *
Website
ความคิดเห็น