2013-06-26 4 views
16

J'utilise twitter bootstrap typeahead pour afficher certaines données du serveur, le problème est quand l'utilisateur tape une lettre typeahead fait un appel ajax au serveur et quand j'essaye de taper 2 ou 3 lettres rapidement cela fera 2 ou 3 ajax appels au serveur, est-il possible de faire un délai lorsque l'utilisateur est en tapant les lettres pour faire un seul appel ajax au serveurTwitter bootstrap typeahead délai

mon code au moment:

$('#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 
         }); 

Répondre

35

Utilisez cette solution:

(function() { 
    var timeout; 

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

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

Voir en action:

http://jsfiddle.net/nnPVn/

setTimeout et clearTime fonctionne très bien!

+0

merci, fonctionne parfaitement – Maki

+1

Il a un défaut - si vous avez un ensemble minLength, puis lorsque vous faites rapidement un retour arrière dans le texte entré et effacez l'entrée, le délai d'attente finit par tirer. Je m'attendrais à ne pas ... voir cet exemple: http://jsfiddle.net/nnPVn/16/ –

+0

La question ci-dessus n'a pas ce problème parce que le minLength est 1 (le défaut). – MrBoolean