Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не работает сброс таймера (setTimeout и clearInterval) (https://javascript.ru/forum/events/53483-ne-rabotaet-sbros-tajjmera-settimeout-i-clearinterval.html)

stankhat 05.02.2015 16:47

Не работает сброс таймера (setTimeout и clearInterval)
 
Есть поле input, при вводе в которое должен появляться всплывающий список с вариантами, но не сразу, а спустя 3 секунды после того, как пользователь перестал вводить в input. Делаю так:

var timer; // ID таймера

$('input#load').keydown(function() {
clearInterval(timer); // удаляем предыдущий таймер
timer = setTimeout(onShowGeoList, 3000); // устанавливаем новый таймер и запоминае его
}

function onShowGeoList() {

clearInterval(timer); // тут еще раз сбрасываем на всякий случай

// тут выводим всплывающий список с вариантами

}

Проблема в том, что при установки setTimeout сразу же запускается функция onShowGeoList (а должна ждать 3 секунды). 2-ая проблема: не работает clearInterval: если пользователь продолжает набирать, то должен срабатывать сброс таймера до тех пор, пока пользователь не перестанет набирать текст. Таймеры вообще не удаляются, они просто встают в очередь и при каждом нажатии идет вызов функции onShowGeoList(). Как его удалить?

ksa 05.02.2015 16:52

Цитата:

Сообщение от stankhat
не работает clearInterval

Ты вкурсе что делает этот метод? :)

P.S.
В JS много чего не работает, это общеизвестный факт на этом форуме... :lol:

ksa 05.02.2015 16:53

Цитата:

Сообщение от stankhat
Проблема в том, что при установки setTimeout сразу же запускается функция onShowGeoList (а должна ждать 3 секунды).

Бивас, тест! (с)
setTimeout(function(){
   alert('А вот и нет! Она ждала сколько требовалось.');
},3000);

Таки работает!

ksa 05.02.2015 16:55

Цитата:

Сообщение от stankhat
Таймеры вообще не удаляются, они просто встают в очередь и при каждом нажатии идет вызов функции onShowGeoList(). Как его удалить?

Таки использовать соответствующий метод. ;)
http://javascript.ru/setTimeout


Часовой пояс GMT +3, время: 16:54.