2012-01-07 5 views
1

戻り値がsetInterval()またはsetTimeOut()の場合は、clearInterveral(id)またはclearTimeOut(id)を使用してクリアすることはできますか?IDを知らずにすべてのsetInterval()とsetTimeOut()をクリアするにはどうすればいいですか?

ありがとうございました。

+2

[IDなしのclearTimeout](http://stackoverflow.com/)質問/ 4433926/cleartimeout-without-id) – pimvdb

+1

IDを常に持つようにコードを適切に構造化します。 –

答えて

4

あなたは、元の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); 

など。

+0

'window.setTimeout()'と 'window.setInterval()'の戻り値は大部分は文書化されていません(参照も標準もないクローズドソースもありません)。ホストオブジェクトのメソッドを置き換えようとする試みは、別の本当に悪い考えです。 – PointedEars

+0

@PointedEars:今は[HTML5仕様](http://www.w3.org/TR/html5/timers.html)の一部です(何も意味がありません)。 –

+0

本当に悪い考え - なぜですか?ネイティブ関数が実行して返すべきものを返します。これは小さなラッパーであり、この質問に対する完璧な答えです。 – abuduba

1

これには、レジスタパターンベースのオブジェクトを使用できます。

1

私が知っている限り、これは元のIDがなければ不可能なので、配列に格納するとよいでしょう。

関連する問題