我在jQuery插件中调用了一个setInterval(),但是我想从我的主页面清除它,在那里我无法访问存储setInterval的变量。
有没有办法清除页面上的所有计时器?
答案 0 :(得分:50)
这可以是清除所有间隔的逻辑之一......
for (var i = 1; i < 99999; i++)
window.clearInterval(i);
答案 1 :(得分:23)
您可以覆盖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.
}
答案 2 :(得分:8)
不,你不能,不能没有原始变量。
答案 3 :(得分:4)
答案
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]);
}
}
答案 4 :(得分:2)
我实现这一点的方法是使用一个应用程序级别数组(例如,Application.setIntervalIds = []),每当创建一个时,我就会将setInterval id推送到该数组。然后我可以在需要时简单地在数组中的每个id上调用window.clearInterval(id)。
举个例子,当我创建一个新的setInterval时,我会写一些像(coffeescript):
id = setInterval (() -> function2call()), timeout
Application.setIntervalIds.push id
然后我有一个clearAllSetIntervals函数,我可以在需要时调用它:
Application.clearAllSetIntervals = () ->
$.each Application.setIntervalIds, (index, id) ->
window.clearInterval id
答案 5 :(得分:1)
我找到的最佳方式......
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( );
答案 6 :(得分:0)
我将每个间隔id存储在一个隐藏容器中,然后调用此函数循环并使用window.clearInterval删除每个id ..
function clearAllIntervals() {
$('.intervals-holder span').each(function() {
var clearThis = parseInt($(this).text(), 10); // gets the interval id from the span holder
window.clearInterval(clearThis); // removes the interval
$(this).remove(); // removes the span holding the id
})
}
// setting interval
// (i clear all first because in my code the buttons can be double clicked..
// ..and there is more than one button to start what i want to be started)
function audioRingingInterval() {
clearAllIntervals();
var intervalId = setInterval(audioRingingStartFunction, 500);
$('.intervals-holder').append('<span>'+intervalId+'</span>');
}
// i call this when i want to set the interval and it calls the interval function above
function audioRingingStartFunction() {
$('.audio-blinking').toggleClass('blinking');
}
// i call this when i want to stop the interval
function audioRingingStopFunction() {
clearAllIntervals();
$('.audio-blinking').removeClass('blinking');
}
这很难看,但就我的目的而言,它很有效。
答案 7 :(得分:0)
这对我有用。
//Setting interval
var startInterval = setInterval(function () {
//interval code here
}, 1000);
//Clearing interval
var countInterval = startInterval != undefined ? startInterval : 0;
for (var a = 0; a < countInterval; a++) {
clearInterval(a);
}