2013-06-26 15 views
16

Ich benutze twitter bootstrap typeahead für die Anzeige einiger Daten vom Server, das Problem ist, wenn Benutzer einen Buchstaben typeahead schreibt einen Ajax-Aufruf an den Server und wenn ich versuche, 2 oder 3 Buchstaben schnell zu schreiben es 2 oder 3 ajax-Aufrufe an den Server, gibt es eine Möglichkeit, eine Verzögerung zu machen, wenn Benutzer Buchstaben machen nur ein ajax-Aufruf an den ServerTwitter bootstrap typeahead Verzögerung

meinen Code zur Zeit eingeben:

$('#SEARCH-INPUT').typeahead({ 
          source: function (query, process) { 

           jQuery.ajax({ 
            type: "GET", 
            url: "/organisations/search", 
            data: {search_name: $("#SEARCH-INPUT").val()}, 
            beforeSend: function(){ 
             $("#SEARCH-LOADING").show(); 
            }, 
            success: function (data) { 
             organisations = []; 
             organisations_hash = {}; 
             $.each(data, function(i, item){ 
             organisations_hash[item.name.toUpperCase()] = item.id; 
             organisations.push(item.name); 

             }); 
             organisations.sort(); 

             $("#SEARCH-LOADING").addClass("hidden"); 
             process(organisations); 
            }, 
            error: function(){ alert("error");}, 
            async: false 
            }); 
          } 
          ,updater: function (item) { 
           $("#SEARCH-INPUT").val(item); 
           $("#SEARCH-BUTTON").click(); 
           return item; 
          } 
          ,items: 9 
          ,minLength: 1 
         }); 

Antwort

35

Mit dieser Lösung:

(function() { 
    var timeout; 

    $('[name="fill"]').typeahead({ 
     source: function(value) { 
      if (timeout) { 
       clearTimeout(timeout); 
      } 

      timeout = setTimeout(function() { 
       alert(value); 
      }, 300); 
     } 
    }); 
})(); 

Siehe in Aktion:

http://jsfiddle.net/nnPVn/

SetTimeout und clearTime funktioniert gut!

+0

danke, funktioniert perfekt – Maki

+1

Es hat einen Fehler - wenn Sie eine MinLength gesetzt haben, wenn Sie dann schnell durch den eingegebenen Text zurück und löschen Sie die Eingabe, dann endet das Timeout stil feuern. Ich würde erwarten, dass es nicht ... siehe dieses Beispiel: http://jsfiddle.net/nnPVn/16/ –

+0

Die obige Frage hat dieses Problem nicht, weil minLength 1 ist (die Standardeinstellung). – MrBoolean

Verwandte Themen