Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2015, 16:47
Новичок на форуме
Отправить личное сообщение для stankhat Посмотреть профиль Найти все сообщения от stankhat
 
Регистрация: 27.03.2014
Сообщений: 3

Не работает сброс таймера (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(). Как его удалить?
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2015, 16:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,219

Сообщение от stankhat
не работает clearInterval
Ты вкурсе что делает этот метод?

P.S.
В JS много чего не работает, это общеизвестный факт на этом форуме...
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2015, 16:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,219

Сообщение от stankhat
Проблема в том, что при установки setTimeout сразу же запускается функция onShowGeoList (а должна ждать 3 секунды).
Бивас, тест! (с)
setTimeout(function(){
   alert('А вот и нет! Она ждала сколько требовалось.');
},3000);

Таки работает!
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2015, 16:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,219

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает clearInterval qwermjk Общие вопросы Javascript 6 25.01.2011 14:28
как работает setTimeout??? rhjirftyjn Общие вопросы Javascript 7 24.12.2010 16:39
setTimeout + перегруженый процессор = ??? Slawaq Events/DOM/Window 7 25.11.2010 23:41
Не работает clearInterval thorny Общие вопросы Javascript 3 15.11.2010 02:48
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59