У меня есть этот код jQuery, который запрашивает API при событии нажатия клавиши (через keyterms.php). Он работает как есть, но я пытаюсь понять, как реализовать «паузу», так сказать, чтобы он выполнял запрос только через определенное время (скажем, 2 секунды) после последнего нажатия клавиши. Любая помощь будет высоко ценится. Спасибо!
$(document).ready(function() {
$('#loading').hide();
$('#q').keyup(function(){
$('#loading').show();
$.post("keyterms.php", {
q: $('#q').val()
}, function(response){
$('#qResult').fadeOut();
setTimeout("finishAjax('qResult', '"+escape(response)+"')", 400);
});
return false;
});
});

Используйте setTimeout, чтобы вызывать метод ajax только через две секунды после нажатия клавиши, а не вызывать его напрямую при нажатии клавиши. Я не слишком хорошо знаком с недостатками JQuery, так как у меня еще не было возможности поиграть с ним, но он должен быть совместим с вашим методом, описанным выше.
(Примечание: две секунды - это довольно много;))
Вы можете использовать плагин jQuery, который StackOverflow использует для своего Страница пользователей; это называется Тип Часы
Применять его можно так:
<input type = "text" id = "tb" />
<script>
$("#tb").typeWatch({ highlight: true, wait: 500, captureLength: -1, callback: finished });
</script>
Где в этом случае finished - это функция обратного вызова (ссылка), которая будет вызываться, когда количество введенного времени (в данном случае 500 мс) пройдет от последнего события keyUp.
Вот краткое описание требуемых параметров (на самом деле он принимает один параметр, объект, и его свойства используются в качестве входных параметров):
Чтобы увидеть демонстрация этого плагина в реальном времени, посмотрите Страница пользователей