@paulvales

Как остановить interval в переменной с динамическим именем?

Приветствую! Устал бороться, создаю интервалы
window[intername] = setInterval(function () {...})
intername- динамическое имя
Потом по кнопке нужно его завершить
clearInterval( window[intername]);
но этого не происходит
Это используется для аренды велосипедов, т.е. при начале создается таймер с обратным отсчетом и уведомлением об окончании , но если поездку завершили досрочно то уведомление все равно срабатывает т.к. работает таймер
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 2
twobomb
@twobomb
Все должно работать. Единственное в чем может быть проблема, это имя itername в
clearInterval( window[intername]); не совпадает с именем которое было задано в window[intername] = setInterval(function () {...}) либо оно где-то заново инициализируется после clearInterval
Ответ написан
ernesto77
@ernesto77
php, rb, py, js, webdev
что то похожее было у меня, может поможет:

(function(w) {
    var oldST = w.setTimeout;
    var oldSI = w.setInterval;
    var oldCI = w.clearInterval;
    var timers = [];
    w.timers = timers;
    w.setTimeout = function(fn, delay) {
        var id = oldST(function() {
            fn && fn();
            removeTimer(id);
        }, delay);
        
        return id;
    };
    w.setInterval = function(fn, delay) {
        var id = oldSI(fn, delay);
        timers.push(id);
        return id;
    };
    w.clearInterval = function(id) {
        oldCI(id);
        removeTimer(id);
    };
    w.clearTimeout = w.clearInterval;

    function removeTimer(id) {
        var index = timers.indexOf(id);
        if (index >= 0)
            timers.splice(index, 1);
    }
}(window));


после применения этого фикса setTimeout отработает и удалит остальные
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы