2011-09-12 7 views

答えて

8

にそれを変更する必要があります。それはあなたのコードをonloadハンドラにラップして、doSomethingをグローバル名前空間の外に保ちます。したがって、setTimeoutがあなたのコードを実行しようとすると、doSomethingが見つかりませんでした。 「何のラップ」を実行しないようにjsfiddle変更し、すべてが順調です:http://jsfiddle.net/gilly3/PRff7/3/

あなたは、文字列でdoSomethingにお電話をラップしていない場合はsetIntervalが同じであるdoSomethingへの直接参照を取得しますので、それも動作します範囲。グローバル参照は必要ありません。

+1

+1理由を説明する*なぜそれがうまくいかなかったのですか? – user113716

+0

+1は問題が何であるかを調べるために – SLaks

+0

すばらしい答え。私はインターネット上のサンプルをインターネットで見続けていました。なぜそう多くのサンプルが間違っているのか不思議に思っていました。単にプレjQueryだからです。 – Mohammad

2

あなたはsetIntervalに文字列を渡すべきではありません。

setInterval(doSomething, 1000); 

代わりに、関数自体を渡します

+1

は()のdoSomethingから削除。 –

+0

@ダニエル:何ですか? – SLaks

+0

申し訳ありませんが、彼のコメントが私に向けられていたので、なぜdoSomething()が発砲していないのかを尋ねました。 – Mohammad

3

あなたはあなたのコードが原因jsfiddleで実行されていない

setInterval(doSomething, 2000); 
function doSomething(){alert('hi')} 
1

あなたのコードをインラインで残したい、といくつかの名前の関数にそれを委任しない場合(コードが複数のコマンドで構成されている場合は特に)、これを使用する:

setInterval(function(){ alert('hi'); alert('hello') }, 2000); 
関連する問題