2014-05-15 13 views
5

Tôi đã có một yêu cầu ajax thực hiện mỗi lần người dùng nhấn một số nút (viết văn bản) trong một vùng văn bản nhất định. Điều này sẽ làm việc rất tốt (nó là một chức năng lọc tìm kiếm btw.), Nhưng nó sẽ không phải là một ý tưởng tốt để thực hiện các bộ lọc sau mỗi tổ hợp phím. Vì vậy, tôi đã suy nghĩ về việc làm một điều delayer. Vì vậy, yêu cầu ajax sẽ chỉ thực hiện khi ít nhất 1 giây đã trôi qua kể từ khi người dùng nhấn nút cuối cùng. Làm thế nào tôi có thể đạt được điều này?Đợi 1 giây trước khi thực hiện yêu cầu AJAX onkeyup

<textarea id="text" name="text" onkeyup="Search()"</textarea> 

function Search() 
{ 
    $.ajax({... 
    ... 
} 

Vì vậy, rõ ràng là nó sẽ chạy mọi lúc. Ví dụ: nếu tôi nhập "hello" vào vùng văn bản nhanh, nó sẽ chạy 5 lần và nó không sử dụng. Nó sẽ là đủ để chạy nó chỉ khi tôi ngừng viết trong hơn 1 giây.

Trả lời

7

Bạn có thể sử dụng setTimeout để trì hoãn một hành động trong một số mili giây. Bạn cũng có thể xóa hết thời gian chờ để ngăn các yêu cầu được xếp hàng đợi nếu ai đó nhập nhanh. Hãy thử điều này:

var timer; 
function Search() { 
    clearTimeout(timer) // clear the request from the previous event 
    timer = setTimeout(function() { 
     $.ajax({ 
      // ... 
     }); 
    }, 200); 
} 

Lưu ý tôi đã 200ms chậm trễ đó là bình thường hơn đủ thời gian cho một người nào đó đã gõ vài phím, nhưng cũng đủ nhanh chóng mà nó sẽ không xuất hiện quá chậm đối với giao diện người dùng để cập nhật.

+0

Có thể bạn nên đặt 'hẹn giờ' với trả về' setTimeout' :) – Holt

+0

@Holt cảm ơn bạn! Đánh máy quá nhanh, cần chậm trễ hơn;) –

+0

Cảm ơn bạn, điều này thực sự đã giải quyết được vấn đề của tôi! :) Xin lỗi vì là người mới bắt đầu, nhưng tôi học nhanh. :) – egyeneskanyar

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