clearInterval не останавливает интервальную операцию

1

Я работаю над таймером и хотел бы, чтобы операция setInterval() завершилась, когда счетчик достигнет нуля. Кроме того, я хотел бы, чтобы функция была "отключена", если хотите, чтобы я мог сбросить значение, которое подается в таймер, без таймера, снова начинающего уменьшаться.

Когда я настраиваю код следующим образом:

    function countdown(){ 
        var intervalKill = setInterval(function(){
        var start = document.getElementById("startValue").innerHTML;
        if (start > 1){
            var time_left = start - 1;
            document.getElementById("startValue").innerHTML = time_left;
        } else if (start === 1) {
            clearInterval(intervalKill)
        }
        
    }, 1000);
    }

Он работает отлично, однако, если он достигает 1, и я сбрасываю таймер, он снова начинает обратный отсчет.

Когда я кодирую это так:

    function countdown(){ 
        var intervalKill = setInterval(function(){
        var start = document.getElementById("startValue").innerHTML;
        if (start > 1){
            var time_left = start - 1;
            document.getElementById("startValue").innerHTML = time_left;
        } else if (start === 1) {
            clearInterval(intervalKill);
            break;
        }
        
    }, 1000);
    }

Функция просто не запускается вообще. Может кто-то пролить свет на то, что здесь происходит и как заставить его работать?

  • 1
    Вы сравниваете строку и число.
  • 0
    @ Li357 Это потому, что я использую неправильную операцию равенства?
Теги:

1 ответ

0
function countdown(){ 
    var intervalKill = setInterval(function(){
    var start = document.getElementById("startValue").innerHTML;
    if (start > 1){
        var time_left = start - 1;
        document.getElementById("startValue").innerHTML = time_left;
    } else if (+start === 1) {
        clearInterval(intervalKill);
        // break;  <-- not necessary
    }

}, 1000);
}

Либо проанализируйте start до целого числа, используя unary + или parseInt либо используйте == вместо === так как последний также проверяет информацию о типе. innerHTML возвращает строку.

  • 0
    Спасибо, это все еще не выполнялось, когда у меня было ключевое слово break там. После того, как я удалил его, он работал просто отлично. Таким образом, окончательное решение заключается в том, чтобы внести предложенное вами изменение и удалить ключевое слово "break".
  • 0
    Я не думаю, что перерыв сделает что-нибудь, это просто не требуется. Обычно используется с петлями или переключателем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню