Скасувати / вбити window.setTimeout () до того, як це станеться


194

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

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

Чи можна скасувати або вбити це за допомогою якого-небудь jQuery або JavaScript-коду, тому я не маю цього процесу?

Відповіді:


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

clearTimeout(timer1)

101
вікно - це лише ім'я глобальної простори імен, тому це насправді не потрібно (для 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.