Отмените / убейте window.setTimeout () до того, как это произойдет

194

У меня есть несколько мест, где я использую строку ниже, чтобы очистить статус, например. У меня есть несколько таких, которые зависают в течение 10 секунд или более, и если пользователь нажимает вокруг, действие может происходить через неправильные промежутки времени.

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

Можно ли отменить или убить это с помощью некоторого кода jQuery или JavaScript, чтобы у меня не было этого процесса?

Торан Биллапс
источник

Ответы:

376
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)
Диодей - Джеймс Макфарлейн
источник
101
window - это просто имя глобального пространства имен, поэтому в этом нет необходимости (для setTimeout или clearTimeout).
Мэтью Крамли
7
Поскольку первым параметром для setTimeout является функция, а метод removeStatusIndicator () является функцией, вы можете повысить производительность (и ввести меньше) просто: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Это позволяет избежать вызовов вложенных функций.
HarleyDave
5
и window.clearTimeout(timer1)не будет работать в Node.js. Либо просто используйте, clearTimeout(timer1)либоglobal.clearTimeout(timer1)
CL22
2
@ user1944491 Двойного вызова не будет: обратите внимание, что @HarleyDave написал setTimeout(removeStatusIndicator, ...), т.е. функция removeStatusIndicatorне вызывается.
Фрерих Раабе
3
Пожалуйста, не обращайте внимания на то, что говорит @ user1944491 - это неправильно. Функция, переданная в setTimeout, не вызывается дважды. Chrome не изменит свое поведение, более вероятно , что вы облажались, вызвав функцию , setTimeout( func(), 0 )а неsetTimeout( func, 0 )
Sethi
2

Window.clearTimeout () должен делать то, что вы пытаетесь достичь.

Флорин Тоадер
источник
6
Пожалуйста, объясните свой ответ и приведите несколько примеров. Хороший ответ всегда будет объяснение того , что было сделано и почему это было сделано таким образом, не только для OP , но для посетителей будущего так.
B001 ᛦ
4
+1 только потому, что комментарий выше выглядит абсолютно неактуальным и случайным для меня. Ответ выглядит совершенно нормально, он был только что опубликован позже, так что это больше похоже на «копию-вставку» уже предоставленного ответа.
vir us