I'm using the following code (written by another user) to throttle ajax requests in a livesearch function:
JSFiddle if you prefer a demo: http://jsfiddle.net/4xLVp/
It seems buggy, though. Clearing values with Ctrl+shift+back-arrow
, and typing again causes a flurry of requests. Blank values also cause a request. It dones't seem right, especially compared to jQuery UI autocomplete, where request delays seem more measured.
$('##tag-search').keyup(function() {
var elem = $(this);
if (elem.val().length >= 2) {
elem.data('search',search).clearQueue().stop().delay(1000).queue(function() {
$.ajax({ // ajax stuff
'success': function(data){ /*show result*/ }
});
if (elem.data('search') != string) return;
});
} else if (string.length <= 1) { /*show original content*/ }
});
Is there a better way to handle this?
I would just use setTimeout
:
(function() {
var timeout;
$('#tag-search').keyup( function() {
var elem = $(this);
if (elem.val().length >= 2) {
clearTimeout(timeout);
timeout = setTimeout(function() {
$.ajax({ // ajax stuff
'success': function(data){ /*show result*/ }
});
}, 80); // <-- choose some sensible value here
} else if (string.length <= 1) { /*show original content*/ }
});
}());
There is also a debounce/throttle plugin.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With