Остановить таймер JavaScript

#javascript #timeout

Вопрос:

Я пытаюсь остановить таймер, если div ошибка div отображается на странице. Вот код. Я не уверен, почему clearTimeout не останавливает таймер.

     <script type="text/javascript">
        
        function timeOutRedirect(){
            
                var delay = 60000; // time in milliseconds

                // Show message div
                document.getElementById("message").style.display = "block";
                // Display message
                document.getElementById("message").innerHTML = "<h1>Your order is being processed.</h1>";

                setTimeout(function(){
                        if( document.getElementsByClassName('woocommerce-NoticeGroup-checkout').length != 0 ){
                        // If error div is loaded
                        delay = clearTimeout(); //this is n0t clearing timer
                        document.getElementById("message").style.display = "none";
                        console.log('error notice div loaded');
                    } else {
                        window.location = "/processing-information/";
                }
            },delay);

        }

    </script>
 
     <!-- Time out double order timer -->
    <div id="message" style="background: #a1f5b9; margin: 10px 0; padding: 10px; text-align: center; display: none; z-index: 99999;"></div>
 

Комментарии:

1. setTimeout возвращает целое число, которое должно быть передано в clearTimeout

2. Вы могли бы легко поискать в Google описание того, как clearTimeout на самом деле работает , что бы четко показало вам, почему ваш код не работает

3. Как сказал Хармандип, вы должны передать целочисленный параметр (который определяет конкретный тайм-аут для отмены) в clearTimeout

4. Привет @Дейв. Добро пожаловать в Stack Overflow. В Stack Overflow люди ценят, чтобы спрашивающие проводили некоторые исследования, прежде чем задавать свой вопрос. Например, если вы выполните поиск в Google по запросу «отменить javascript таймера», вы найдете ссылки на «clearInterval».

Ответ №1:

Если у вас есть интервал, вы можете использовать метод clearInterval ().

 const handle = setInterval(function(){...},delay);
...
// Cancel the interval
clearInterval(handle)
 

Для таймера вы можете использовать метод clearTimeout ().

 const handle = setTimeout(function(){...},delay);
...
// Cancel the timer
clearTimeout(handle)
 

Видишь https://www.w3schools.com/jsref/met_win_cleartimeout.asp

Комментарии:

1. Это не интервал, это тайм-аут. Следует clearTimeout ли использовать? MDN говорит, что они могут использоваться взаимозаменяемо, хотя они рекомендуют использовать соответствующие.

Ответ №2:

Может быть, вы можете использовать, например:

Время подсчета = setInterval (() = > console.log(«Тест»), 1000); Очистить время подсчета (время подсчета);

таким образом, вы можете манипулировать переменной countTime для остановки при вызове метода clearInterval.