Я всегда использую эту простую функцию для обработки таймера, который будет запускать функцию обратного вызова после того, как пользователь перестал вводить текст в течение указанного времени:
var typewatch = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
}
})();
Использование (пример с MooTools):
$('textInput').addEvent('keyup', function(e){
typewatch(function () {
// executed only 500 ms after the last keyup event
// make Ajax request
}, 500);
});
Основное отличие этого решения от других ответов состоит в том, что все логика таймера обрабатывается самой функцией typewatch
, обработчику событий не нужно ничего знать о таймере, это просто вызывает функцию. Кроме того, нет глобальных переменных, о которых нужно заботиться (идентификатор таймера не хранится в глобальной переменной).