2012-02-24 2 views
0

毎秒iframeを更新するスクリプトを作成しようとしています。これは私が今までに持っているもので、何らかの理由で少し時間がかかり、14541 +/- 50程度の数字が表示されます。 「何か」と「何か」という言葉も決して画面に表示されません。javascriptのタイムドループでsetTimeoutが機能しない

無限ループや何かに対するブラウザの保護機能が組み込まれているため、14541で停止していますか?タイマーが正しく機能しないのはなぜですか?

var c = 0; 
var t; 
timer(); 
document.write("something"); 
function timer(){ 
    if(t) { window.clearTimeout(t) } 
    update_preview(); 
    c++; 
    t=setTimeout(timer(), 1000); 
    document.write("something else"); 
} 
function update_preview(){ 
    prev = window.open("","preview"); 
    prev.document.open(); 
    prev.document.writeln("<html><head><title>live preview window</title></head><body>"); 
    prev.document.writeln(c); 
    prev.document.writeln("</body></html>"); 
    prev.document.close(); 
} 

答えて

0

ファンクションタイマーのパラメータとしてtimerメソッドを呼び出すことはできません。あなたはパラメータとして関数タイマーを渡す必要があります:

setTimeout(timer、1000);

使用しないでください。document.writeは廃止されました。ページを動的に操作するには、DOMとjQueryを見てください。

+0

これについて詳しく説明できますか?私はタイマーを修正し、何とか0で動作してから、新しいページにリダイレクトして何か他のものを何度も印刷し、増加する数字を表示するポップアップが表示されます。 – mavix

0

timer()を削除します。タイマーが切れるときに実行関数であることが(あなたがその関数でreturn何もしていないので、undefinedtimer()を置くことによって

、あなたはすぐにtimer関数を呼び出すと戻り値を割り当てています。

代わりに、timerと入力してください。これは、戻り値ではなく関数自体を、タイマーがなくなったときに呼び出される関数に渡します。

function timer() {...}ビットの前に、への最初のコールをにすることをおすすめします。 JavaScriptは自動的にこれを行います(「ホイスト」と呼ばれます)。しかし、関数定義を最初に記述するかどうかはわかりやすいです。

0

この行でt=setTimeout(timer(), 1000);timerをsetTimoutに渡していない場合は、timerの結果を渡しています。代わりにt=setTimeout(timer, 1000);を使用してください。

1

使用これは、

t=setTimeout(function(){timer();}, 1000); 

または

t=setTimeout(timer, 1000); 

または

t=setTimeout("timer()", 1000); 

最後のものが使用されるべきではないオプションです。

0

「他のもの」が表示されない理由は、setTimeoutを呼び出して関数を渡すときに、timer関数が直ちに処理されるためです。関数内でも同じことが起こっています。つまり、ブラウザを無応答にする無限回帰ループを作成しています。

あなたが代わりにsetTimeoutを使用しての、timerにあなたは1秒毎にあるtimer機能を、実行するたびにsetTimeoutを実行しているので、あなたはsetIntervalを使用する必要があります。

だからあなたのコードは次のようになります。代わりに、1秒ごとにsetTimeoutを実行しているの

var c = 0; 
var t; 
timer(); 

// call setInterval here to run the timer function every 1 second 
t=setInterval('timer()', 1000); 

document.write("something"); 
function timer(){ 
    if(t) { window.clearTimeout(t) } 
    update_preview(); 
    c++; 
    document.write("something else"); 
} 
function update_preview(){ 
    prev = window.open("","preview"); 
    prev.document.open(); 
    prev.document.writeln("<html><head><title>live preview window</title></head><body>"); 
    prev.document.writeln(c); 
    prev.document.writeln("</body></html>"); 
    prev.document.close(); 
} 

はだから今、あなたは一度のsetIntervalを実行しているし、それは1秒ごとに処理します。

0

setTimeoutの代わりにsetIntervalを使用する方がよいでしょう。