[How to] jQuery Autocomplete custom

jQuery ui logo

สำหรับใครที่ใช้ jQuery ui ไอ้ตัว autocomplete แล้วต้องการแก้ไขอะไรเพิ่มเติม วันนี้ผมจะมาเขียนแปะไว้เตือนตัวเองเพื่อว่าอนาคตได้ใช้อีกหรือคนที่มองหาวิธีทำคล้ายๆกันต้องการเพิ่มเติมก็สามารถทำได้ครับ ติดตามในบทความนี้เลย

ปกติที่เราใช้กันอยู่เนี้ยหากเราต้องการเพิ่มเติมเช่นว่าจะให้มัน hilight ตัวที่ search ทำอย่างไร ต้องไปเขียนไว้ตรงไหน วันนี้ผมมีคำตอบครับดังนี้

[codesyntax lang=”javascript” title=”jQuery ui autocomplete”]

var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
  source: function( request, response ) {
          var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
          response( $.grep( tags, function( item ){
              return matcher.test( item );
          }) );
      }
});

[/codesyntax]

 

และเราต้องการเพิ่มว่าเวลามันแสดงให้ hilight ไปด้วยเราต้องทำการ override method ในการแสดงผลของตัวมันด้วยโค้ดด้านล่างเลยครับ

[codesyntax lang=”javascript” title=”override method “]

$("element").data("autocomplete").menu.options.selected = function(event, ui) { 
      //สิ่งที่ต้องการเปลี่ยนแปลง
}

[/codesyntax]

 

โดยตัวแปร ui จะมีค่าต่างๆพวก label , value ให้อยู่แล้วเราสามารถเอามาปรับเปลี่ยนได้เลย ยกตัวอย่างเช่น

[codesyntax lang=”javascript”]

$("#element").data("autocomplete")._renderItem = function (ul, item) 
 {
          var re = new RegExp("^" + this.term) ;
          var t = item.label.replace(re,"" + 
                  this.term + 
                  "");
          return $( "
" )
              .data( "item.autocomplete", item )
              .append( "" + t + "" )
              .appendTo( ul );
      };

[/codesyntax]

 

แค่นี้เราก็จะได้แหละจ้าสบายๆ

ฝากไว้อีกนิดหากมีการเพิ่มเติมอะไรแปลกๆที่ทำการ ใส่เพิ่มไปเองเช่น li บางอย่างที่มันไม่มีอยู่ใน List แล้วมี error ทำนองนี้

[codesyntax lang=”php”]

Uncaught TypeError: Cannot read property 'value' of undefined

[/codesyntax]

มันอาจจะผิดพลาดตรงที่เราเอาไอ้ li แปลกๆเข้าไปในหมู่ list นั้นๆครับให้ทำการ override อีกเช่นเคยแต่คราวนี้เป็น method focus ครับก็จะได้แหละ

[codesyntax lang=”javascript”]

$("#element").data("autocomplete").menu.options.focus = function(event,ui)
{
  return false;
};

[/codesyntax]

จบจริงๆแหละจ้า สวัสดี

พาพันขอบคุณ

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

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Message us

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ปฎิเสธทั้งหมด
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้

  • คุกกี้ที่จำเป็น

    คุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้

บันทึก