Подтвердить что ты не робот

Как я могу clearInterval() для всех setInterval()?

У меня есть setInterval(), который вызывается в плагине jQuery, но я хочу очистить его с моей главной страницы, где у меня нет доступа к переменной, в которой был сохранен setInterval.

Есть ли способ очистить все таймеры, присутствующие на странице?

4b9b3361

Ответ 1

Это может быть одна из логических, чтобы очистить весь интервал...

for (var i = 1; i < 99999; i++)
        window.clearInterval(i);

Ответ 2

Вы можете переопределить setInterval:

window.oldSetInterval = window.setInterval;
window.setInterval = function(func, interval) {
    var interval = oldSetInterval(func, interval);
    // store it in a array for stopping? stop it now? the power is yours.
}

Ответ 3

Нет, вы не можете, не без исходной переменной.

Ответ 4

То, как я это достиг, заключается в наличии массива уровня приложения (например, Application.setIntervalIds = []), к которому я нажимаю идентификаторы setInterval, когда он создается. Тогда я могу просто вызвать window.clearInterval(id) для каждого id в массиве, когда мне нужно.

В качестве примера, когда я создаю новый setInterval, я пишу что-то вроде (coffeescript):

id = setInterval (() -> function2call()), timeout
Application.setIntervalIds.push id

И затем у меня есть функция clearAllSetIntervals, которую я могу вызвать при необходимости:

Application.clearAllSetIntervals = () ->
    $.each Application.setIntervalIds, (index, id) ->
         window.clearInterval id

Ответ 5

Ответ

for (var i = 1; i < 99999; i++)
     window.clearInterval(i);

был тем, кого я искал. С небольшим усовершенствованием этой очень простой логики я смог сделать что-то вроде этого.

var i = 0;
var rotatorId;
var rotator;

rotator =  setInterval(function() {myfunction(), 3000});
rotatorId[i] = rotator;
i++;

if (rotator > 1) {
   for(i = 1; i < rotatorId.length; i++){
      clearInterval(rotatorId[i]);                      
    }                       
}

Ответ 6

Лучший способ найти...

var clearAllIntervals = function ( ) {

    var intervals = [];

    $(".elements").each(function() {
        intervals.push( setInterval(function() {

        }, 1000) );
    });

    return function clearAll ( ) {
        intervals.forEach( clearInterval );
    }

}( );

// When you want to clear them:
clearAllIntervals( );