Ответ 1
Попробуйте следующее:
var timer;
function chk_me(){
clearTimeout(timer);
timer=setTimeout(function validate(){...},1000);
}
Таким образом, каждый раз, когда нажимается клавиша, тайм-аут будет удален и снова установлен.
Приветствую мастеров Интернета:) Теперь у меня появился новый глупый вопрос, и я прошу простить меня. Я читал везде об этом решении, но не нашел того, что работает для меня.
У меня есть:
<input name="domain" type="text" id="domain" onKeyUp="javascript:chk_me();">
Все, что я спрашиваю, как это сделать, чтобы не проверять после нажатия кнопки, но после того, как сказать 1000 миллисекунд бездействия клавиатуры?
Попробуйте следующее:
var timer;
function chk_me(){
clearTimeout(timer);
timer=setTimeout(function validate(){...},1000);
}
Таким образом, каждый раз, когда нажимается клавиша, тайм-аут будет удален и снова установлен.
Другой подход, без глобалов:
var typewatch = function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
}
}();
Применение:
Присоединение события через JavaScript:
window.onload = function () {
document.getElementById('domain').onkeyup = function() {
typewatch(function(){alert('Time elapsed!');}, 1000 );
};
};
Или используя встроенный обработчик событий (не так рекомендуется), как у вас в вашем примере:
<input type="text" name="domain" id="domain"
onKeyUp="typewatch(function(){alert('Time elapsed!');}, 1000 );"/>
Попробуйте демонстрацию здесь.
Действительно полезный пост!
Другой подход без globals, используя свойства функции:
function chk_me(){
if(typeof timer !== undefined){
clearTimeout(this.timer);
}
this.timer=setTimeout(function validate(){validate(...)},1000);
}
setTimeOut() будет таким;)
<input name="domain" type="text" id="domain" onKeyUp="setTimeout('chk_me()',1000);">