戻り値がsetInterval()
またはsetTimeOut()
の場合は、clearInterveral(id)
またはclearTimeOut(id)
を使用してクリアすることはできますか?IDを知らずにすべてのsetInterval()とsetTimeOut()をクリアするにはどうすればいいですか?
ありがとうございました。
戻り値がsetInterval()
またはsetTimeOut()
の場合は、clearInterveral(id)
またはclearTimeOut(id)
を使用してクリアすることはできますか?IDを知らずにすべてのsetInterval()とsetTimeOut()をクリアするにはどうすればいいですか?
ありがとうございました。
あなたは、元のsetTimeoutの両方を置き換えることができますし、好きなのsetInterval:
setInterval = (function(oldsetInterval){
var registered=[],
f = function(a,b){
return registered[ registered.length ] = oldsetInterval(a,b)
};
f.clearAll = function(){
var r;
while(r = registered.pop()) {
clearInterval(r);
}
};
return f;
})(window.setInterval);
そして今:
そんなに同じ名前を使用しないでください@PointedEarsからのコメント勧めるsetInterval(function(){alert(5000)}, 5000);
setInterval(function(){alert(10000)}, 10000);
setInterval.clearAll();
:
をreportingSetInterval = as above;
reportingSetInterval(function(){alert(5000)}, 5000);
など。
'window.setTimeout()'と 'window.setInterval()'の戻り値は大部分は文書化されていません(参照も標準もないクローズドソースもありません)。ホストオブジェクトのメソッドを置き換えようとする試みは、別の本当に悪い考えです。 – PointedEars
@PointedEars:今は[HTML5仕様](http://www.w3.org/TR/html5/timers.html)の一部です(何も意味がありません)。 –
本当に悪い考え - なぜですか?ネイティブ関数が実行して返すべきものを返します。これは小さなラッパーであり、この質問に対する完璧な答えです。 – abuduba
これには、レジスタパターンベースのオブジェクトを使用できます。
私が知っている限り、これは元のIDがなければ不可能なので、配列に格納するとよいでしょう。
[IDなしのclearTimeout](http://stackoverflow.com/)質問/ 4433926/cleartimeout-without-id) – pimvdb
IDを常に持つようにコードを適切に構造化します。 –