2013-06-26 40 views
16

Tôi sử dụng twitter bootstrap typeahead để hiển thị một số dữ liệu từ máy chủ, vấn đề là khi người dùng gõ một chữ typeahead thực hiện một cuộc gọi ajax đến máy chủ và khi tôi cố gắng gõ 2 hoặc 3 chữ cái nhanh nó sẽ làm cho 2 hoặc 3 ajax gọi đến máy chủ, là có một khả năng để làm cho một sự chậm trễ khi người dùng là đánh máy chữ để làm cho chỉ có một cuộc gọi ajax đến máy chủTwitter bootstrap typeahead delay

mã của tôi vào lúc này:

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

Trả lời

35

sử dụng giải pháp này:

(function() { 
    var timeout; 

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

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

Xem trong hành động:

http://jsfiddle.net/nnPVn/

setTimeout và clearTime hoạt động tốt!

+0

Cảm ơn bạn, hoạt động hoàn hảo – Maki

+1

Nó có một lỗ hổng - nếu bạn có một tập MinLength, sau đó khi bạn nhanh chóng lùi lại thông qua văn bản đã nhập và xóa đầu vào, thì thời gian chờ sẽ kết thúc. Tôi hy vọng nó sẽ không ... xem ví dụ này: http://jsfiddle.net/nnPVn/16/ –

+0

Câu hỏi trên không có vấn đề này gây ra minLength là 1 (mặc định). – MrBoolean

Các vấn đề liên quan