JQuery clearInterval & scope - PullRequest
       10

JQuery clearInterval & scope

2 голосов
/ 14 марта 2011

Если у меня есть 2 скрипта / плагина jQuery (a + b), у b и b подстрекателей есть интервал (setInterval). Как я могу очистить Интервал b от a?

Я попробовал глобальные переменные и передал интервал ID b из a, но пока безрезультатно

Я хочу отменить, прежде чем он сможет считать до 3:

// Plugin a
; (function($) {
    var xIntervalID;
    jQuery.fn.CallA = function() {
        $().IamB(xIntervalID, 4000);
        setTimeout(function() {
            $().CancelA(xIntervalID);
        }, 11000);
    }
    jQuery.fn.CancelA = function(IntervalID) {
        clearInterval(IntervalID);
        alert('Cancel called!');
    }

})(jQuery);

// Plugin b
; (function($) {
    jQuery.fn.IamB = function(xIntervalID,Interval) {
        var Something = 0;
        xIntervalID = setInterval(function() {
            Something += 1;
            alert(Something);
        }, Interval);
    }

})(jQuery);



// Start
$().CallA();

1 Ответ

1 голос
/ 14 марта 2011

Я думаю, у вас есть две возможности, если вы хотите придерживаться setInterval.Либо верните идентификатор из плагина B:

jQuery.fn.CallA = function() {
    var xIntervalID = $().IamB(xIntervalID, 4000);
    setTimeout(function() {
        $().CancelA(xIntervalID);
    }, 11000);
}

jQuery.fn.IamB = function(Interval) {
    var Something = 0;
    return setInterval(function() {
        Something += 1;
        alert(Something);
    }, Interval);
}

, либо передайте объект плагину B. Объекты передаются по ссылке:

jQuery.fn.CallA = function() {
    var xIntervalID = {};
    $().IamB(ID, 4000);
    setTimeout(function() {
        $().CancelA(xIntervalID.id);
    }, 11000);
}

// in B:

jQuery.fn.IamB = function(xIntervalID,Interval) {
    var Something = 0;
    xIntervalID.id = setInterval(function() {
        Something += 1;
        alert(Something);
    }, Interval);
}
...