2012-05-10 15 views
0

私のJavaScriptコードでは、ユーザがチェックボックスをクリックすると、setInterval()で使用される時間遅延を変更する必要がある部分があります。現時点では、チェックボックスにonchangeハンドラを使用しました。チェックボックスが変更されるたびに、私はclearInterval()setInterval()と呼んでいます。インターバルIDはグローバル変数として持っています。今私がclearInterval()に私の電話をかける前にユーザがチェックボックスを変えれば、何か問題があると思ったが、何も起こらなかった。これを行うためのより良い方法があるのですか、またはこの方法が標準と見なされていますか?存在する場合intervalがあるかどうかを確認する方法はありますか?ClearInterval()とSetInterval()

PS。 私はJavascriptにはとても新しく、約5時間前に開始しました。これは動作するはず

+1

をあなたはかなり明確であるように、あなたは、[この議論](http://stackoverflow.com/questions/729921/settimeout-or-setinterval)を見てかかることがあります利用可能なオプション – AurA

+1

あなたはいくつかのコードを投稿してください(あなたの投稿を編集できます)。 jsFiddleは、サンプルのJavascriptコードを記述するのに適しています。 –

+1

あなたのコードを私たちに教えてください。私たちはあなたにもっと具体的な助言を与えることができます。 Javascriptはシングルスレッドなので、JavaScriptイベントハンドラの実行中にタイマーが実行されることはありませんので、心配する必要はありません。 – jfriend00

答えて

2

var myInterval = setInterval(...); 

document.getElementById('myCheckbox').onchange = function() 
{ 
    var func = arguments.callee; 
    if (func.busy) return; 
    func.busy = true; 
    clearInterval(myInterval); 
    myInterval = setInterval(...); 
    func.busy = false; 
} 
+1

Javascriptはシングルスレッドなので、タイマー間隔は現在実行中のJavaScriptを中断しません。したがって、実行中のようなビジーフラグでコードを保護する必要はありません。私はこれがどのように解決するのか分かりません。 – jfriend00

+0

@ jfriend00:ご意見ありがとうございます。私はこれを認識していますが、ZachSchniderが奇妙な行動を取っているという印象を受けました。 –

+0

@LiorCohenご返信ありがとうございます。私は間違いをしていなかった、あなたの答えは多くのことを明らかにした。 – devjeetroy

関連する問題