javascript - use multiple triggers in jQuery autocomplete using mutiple datasets -


i trying implement twitter/facebook auto-complete on textarea. till have implemented single trigger "@". want work 2 triggers "@" , "#". both have different data sets.

here single dataset. 1 works perfectly.

html

<!doctype html> <html> <head> <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src="//code.jquery.com/jquery-1.9.1.js"></script> <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>   <meta charset="utf-8">   <title>js bin</title> </head> <body>   <textarea class="searchbox" cols="20" rows="10"></textarea> </body> </html> 

js

var triggered = false; // default trigger off var trigger = "@"; // defining trigger  var data = [     {         label: "abc",         value: "abc@live.com"     },     {         label: "def",         value: "deg@altman.com"     },      {         label: "ghf",         value: "sds@lane.com"     } ];  $(".searchbox").autocomplete({     minlength: 0,     source: data,     search: function () {         if (!triggered) {             return false;         }     },     select: function (event, ui){          var text = this.value;         var pos = text.lastindexof(trigger);         this.value = text.substring(0, pos) + ui.item.value;         triggered = false;         return false;     },     focus: function () {         return false;     } }).data( "ui-autocomplete" )._renderitem = function (ul, item) {     return $("<li>")         .append("<a>" + "<b>" + item.label + "</b>  " + item.value + "</a>")         .appendto(ul); };  $('.searchbox').keyup(function (e) {      if (e.keycode == 38 || e.keycode == 40) {         return;     }      var text = this.value;     var len = text.length;     var last;     var query;     var index;      if (triggered) {         index = text.lastindexof(trigger);         query = text.substring(index + trigger.length);         $(this).autocomplete("search",query);     } else if (len >= trigger.length) {         last = text.substring(len - trigger.length);         triggered = (last === trigger);     } }); 

here fiddle : http://jsbin.com/qakefini/7/edit

now tried 2 triggers :

html

<!doctype html> <html> <head> <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src="//code.jquery.com/jquery-1.9.1.js"></script> <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>   <meta charset="utf-8">   <title>js bin</title> </head> <body>   <textarea class="searchbox" cols="20" rows="10"></textarea> </body> </html> 

js

    var triggered = false;      var trigger1 = "@";       var trigger2 = "#"; // defining trigger      var trigger = "@";      var data1 = [     {         label: "abc",         value: "abc@live.com"     },     {         label: "def",         value: "deg@altman.com"     },      {         label: "ghf",         value: "sds@lane.com"     } ];      var data2 = [       {         tag: "what"       },       {         tag: "hello"       },       {         tag: "there"       }     ];      var data = jquery.extend(true, {}, data1);      $(".searchbox").autocomplete({         minlength: 0,         source: data,         search: function () {             if (!triggered) {                 return false;             }         },         select: function (event, ui){              var text = this.value;             var pos = text.lastindexof(trigger);             this.value = text.substring(0, pos) + ui.item.value;             triggered = false;             return false;         },         focus: function () {             return false;         }     }).data( "ui-autocomplete" )._renderitem = function (ul, item) {         return $("<li>")             .append("<a>" + "<b>" + item.label + "</b>" + item.value + "</a>")             .appendto(ul);     };       $(".searchbox").keypress(function (e) {          if (e.charcode != 64 && e.charcode != 35) {               return;         }          if (e.charcode == 64) {           trigger = trigger1;           data = jquery.extend(true, {}, data1);         }        else if (e.charcode == 35 ){            trigger = trigger2;            data = jquery.extend(true, {}, data2);          }     });       $(".searchbox").autocomplete({         minlength: 0,         source: data,         search: function () {             if (!triggered) {                 return false;             }         },         select: function (event, ui){              var text = this.value;             var pos = text.lastindexof(trigger);             this.value = text.substring(0, pos) + ui.item.value;             triggered = false;             return false;         },         focus: function () {             return false;         }     }).data( "ui-autocomplete" )._renderitem = function (ul, item) {         return $("<li>")             .append("<a>" + "<b>" + item.label + "</b>  " + item.value + "</a>")             .appendto(ul);     };      $('.searchbox').keyup(function (e) {          if (e.keycode == 38 || e.keycode == 40) {             return;         }          var text = this.value;         var len = text.length;         var last;         var query;         var index;          if (triggered) {             index = text.lastindexof(trigger);             query = text.substring(index + trigger.length);             $(this).autocomplete("search",query);         } else if (len >= trigger.length) {             last = text.substring(len - trigger.length);             triggered = (last === trigger);         }     }); 

and here fiddle: http://jsbin.com/qakefini/22/edit

it not responding search queries. going wrong ? please help. thanks. regards.

in second example, have 2 arrays data1 , data2, yet you're telling .autocomplete() data source data (the line reads: source: data) - undefined.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -