jQueryプラグインでsetInterval()が呼び出されましたが、メインページからクリアしたいので、setIntervalが格納されている変数にアクセスできません。すべてのsetInterval()に対してClearInterval()をクリアするにはどうすればよいですか?
ページにあるすべてのタイマーをクリアする方法は?
jQueryプラグインでsetInterval()が呼び出されましたが、メインページからクリアしたいので、setIntervalが格納されている変数にアクセスできません。すべてのsetInterval()に対してClearInterval()をクリアするにはどうすればよいですか?
ページにあるすべてのタイマーをクリアする方法は?
いいえ、元の変数を使用することはできません。
あなたはの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.
}
これは、すべてのインターバルをクリアするロジックのいずれかになります...
for (var i = 1; i < 99999; i++)
window.clearInterval(i);
ブルートフォースですが、動作します! –
これを実動コードで使用したくないかもしれませんが、トラブルシューティングの際に対話的に使用することがよくあります。 – undefined
これはChromeで正常に機能します。ありがとうVinay –
私はこれを達成した方法は、(アプリケーションレベルのアレイを有することですたとえば、Application.setIntervalIds = [])、setInterval IDを作成するたびにプッシュします。次に、必要に応じて配列の各IDに対してwindow.clearInterval(id)を呼び出すことができます。
id = setInterval (() -> function2call()), timeout
Application.setIntervalIds.push id
そして、私は必要なときに、私が呼び出すことができるclearAllSetIntervals機能を持っています:
Application.clearAllSetIntervals =() ->
$.each Application.setIntervalIds, (index, id) ->
window.clearInterval id
私は(のCoffeeScript)のような何かを書く、新規のsetIntervalを作成する例として
、答え
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]);
}
}
私が見つけた最良の方法...
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();
私はその後をループにこの関数を呼び出すとwindow.clearIntervalで各IDを削除隠し容器に各区間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');
}
これは醜いですが、私の目的では機能します。
私はこの方法が好きです。次に明らかな関数はonUnloadStopTimersです。それが盗まれたと考えてください。 :) –
なぜ 'function'ではなく' new function'ですか? – ThiefMaster
@ThiefMaster彼はJavaの男ですから。 – Sherzod