@Shimpanze

JavaScript: почему не работает функция?

Здравствуйте!

Никак не могу понять как работает сброс таймера clearTimeout(). Написал простой сниппет, со следующим алгоритмом:.

1. После каждого нажатия клавиш - запускается таймер и начинается отсчет 2 секунд;
2. после каждого последующего нажатия - таймер сбрасывается и начинает отсчет заново;
3. если нажатий не было больше 2 секунд - выводим в консоль сообщение.

Сам сниппет:

function a() {
  // сначала сбрасываем таймер
  clearTimeout(timer);

  // если нажатий небыло больше чем 2 секунды - запускаем выполнение функции
  var timer = setTimeout(function() { 
    console.log('Выполнение...');
    return false; // почему здесь не срабатывает false и сообщение выводится 100 раз?
  }, 2000);
}

document.getElementById('content').addEventListener('keyup', a);


Пример

Буду благодарен за простое разъяснение.
  • Вопрос задан
  • 793 просмотра
Решения вопроса 2
@Arik
А если
var timer;
function a() {
  !timer || clearTimeout(timer);
  timer = setTimeout(function() { 
    console.log('Выполнение...');
  }, 2000);
}

document.getElementById('content').addEventListener('keyup', a);
Ответ написан
Stalker_RED
@Stalker_RED
При каждом событии keyup вы вызываете функцию "a", которая:
1. clearTimeout(timer); // обращается к неопределенной переменной timer
2. var timer = setTimeout ... // устанавливает переменную, которая будет уничтожена сразу по завершении функции. (но сам таймер при этом работает, честно пишет "выполнение" и даже возвращает false вникуда)

https://codepen.io/anon/pen/gvWKGY?editors=1111
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы