Я добавляю это как отдельный ответ, потому что он полностью отличается от моего первого ответа.
$('#yourinput').keyup(function(){
var input = this,
timer = $.data(this, 'timer'),
lastrequest = $.data(this, 'lastrequest');
if (timer) { // if there is a keyup timeout still pending, cancel it
clearTimeout(timer);
$.data(this, 'timer', 0);
}
if (lastrequest) { // if there is an AJAX request still running, abort it
lastrequest.abort();
$.data(this, 'lastrequest', false);
}
timer = setTimeout(function(){
lastrequest = $.post({ // or whatever your AJAX call is...
url: 'yourfile',
data: { search: input.value },
success: function(response){
lastrequest = false;
// handle response here
}
});
$.data(input, 'lastrequest', lastrequest);
}, 500);
$.data(this, 'timer', timer);
});