2013-06-26 99 views
16

我使用Twitter的引导预输入从服务器显示的一些数据,问题是用户键入一个字母键盘缓冲,使一个AJAX调用服务器时,当我试图快速型2或3个字母就会使2或3 AJAX调用服务器,是否有可能作出延迟,当用户键入字母仅做一个Ajax调用服务器Twitter的引导预输入延迟

我此刻代码:

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

回答

35

使用此解决方案:

(function() { 
    var timeout; 

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

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

见行动:

http://jsfiddle.net/nnPVn/

setTimeout和clearTime工作正常!

+0

谢谢你,完美的作品 – Maki

+1

它有一个缺陷 - 快速,如果你有一个的minLength集,那么当你退格通过输入文本并清除输入,然后超时STIL结束了射击。我希望它不要......看到这个例子:http://jsfiddle.net/nnPVn/16/ –

+0

上面的问题不会有这个问题造成的minLength为1(默认值)。 – MrBoolean