Бесконечный вызов функции
Приветствую всех. Столкнулся с такой проблемой. Написал скрипт таймера, активирующийся по нажатию на кнопку. Но если не дождавшись окончания отсчета, второй раз нажать по кнопке, функция будет вызываться бесконечно.
var x; $('button').click(function(){ var y = 5; x = setInterval(function(){$('p').text(y); if(y>0){y--} else{Run()}},1000); }); function Run(){ clearInterval(x); console.log("error"); } Вот ссылка на скрипт http://jsfiddle.net/nCT3B/ |
Все, дошло. Просто уже плохо соображаю к вечеру. Извиняюсь. Тему можно удалить. Вот ответ:
if(x){return false;} |
Вопрос снова открыт. Метод clearInterval() как выяснилось не очищает переменную с интервалом, а записывает туда какие-то числовые значения. Что они означают я так и не понял. При чем как до очистки интервала так и после, значение тоже самое. С каждым новым запуском таймера, это значение увеличивается на единицу. Но у меня на сервере это значение по какой-то причине увеличивается на 2, а не на 1. Что означают эти цифры?
|
это идентификатор таймера. clearInterval ничего туда не записывает, и вобще не меняет саму переменную (с чего бы, да и невозможно это)
|
Цитата:
if(x){return false;}Условие всегда истинно, даже после окончания отсчета и очистки интервала. console.log(x) выводит как раз таки эти числа. |
Цитата:
|
Т.е. после clearInterval() нужно поставить x=""?
Да, кстати еще на счет моего первого поста. Просто ради интереса, почему функция зациклилась? Я же каждый раз очищаю интервал. Интервалы где-то в глобальной области сохраняются? |
Цитата:
Код по ссылке нигде не зацикливается, не знаю о чем вы. Считает до 0 и останавливается. |
Цитата:
|
Как я понимаю это. Вы сказали, что каждый раз присваивается новый id интервала. Двойное нажатие кнопки запускает два интервала где-то в глобальной области. Затем clearInterval очищает второй запущенный интервал, а первый остается рабочим навсегда. Правильное мышление?
|
Часовой пояс GMT +3, время: 03:43. |