2017-10-01 8 views
0

ので、私は別のfunctionごとに2トリガーの主要なfunction持っている私のsetTimeout()ループを停止することはできません - 17秒が、私はclearTimeout()でそれを停止しようとすると、それだけで行くと完全にclearTimeout()を無視します。私は何とか

だからこれは私の主要な機能である:

var itemTimer; 
var stopTimeout; 

function major(){ 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 

そして、これは私のストップタイムアウト機能である:

function stopTimer() { 
    clearTimeout(itemTimer); 
    clearTimeout(stopTimeout); 
} 

はあなたのsetTimeout()が誤って呼び出されている

+0

どこで、どのようにあなたがstopTimer' '呼ぶのですか? – Xufox

答えて

1

をご協力いただきありがとうございます。あなたはitems()major()を呼び出しています。代わりに、呼び出す関数として渡す必要があります。

パラメータに角括弧を渡したり、パラメータを引用符で囲んだりしないでください。あなたが探している

itemTimer = setTimeout('items()', itemTime);  
stopTimeout = setTimeout('major()',itemTime); 

代わりの

itemTimer = setTimeout(items, itemTime); 
stopTimeout = setTimeout(major, itemTime); 

は、この情報がお役に立てば幸い! :)

+1

'setTimeout(items、itemTime)'が好ましい構文ですが、タイムアウトを設定するこれらの2つの方法は、同等かそれ以上です。これは問題ではありません。 – Xufox

+0

@NichtEric - 素晴らしい!これで問題が解決されたことを確認したら、[**承認済みとしてマークする](https://stackoverflow.com/help/someone-answers)を忘れずに、下の灰色のチェックボックスをクリックしてください投票ボタン - これを「未回答の質問」キューから削除し、質問者と質問回答者の両方に評判を与えます。質問をして15分後にそれをすることができます。もちろん、あなたは正しいものとして私の答え(または誰かのもの)をマークする義務はありません。解決されたような質問をマークすると、物事がスムーズに流れるようになります:) –

+0

私はこのサイトでは比較的新しい:D –

1

あなたのタイムアウトが積み重なっていると思います。 majorが一度呼び出されるとすぐに、変数itemTimerstopTimeoutに新しいタイムアウト参照が再割り当てされます。したがって、以前に設定されたタイムアウトをクリアする方法はありません。このような場合は、簡単に修正する必要があります。ただ、majorで非常に最初の文としてstopTimerを呼び出します。

function major(){ 
    stopTimer(); 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 
関連する問題