2011-08-16 29 views
1

I次のコードを持っている:jQueryとのsetTimeout

  jQuery(document).ready(function() 
      { 
setTimeout($('#loading').fadeIn('slow'), 9999); 
      }); 

ゆっくりと9999ミリ秒後に負荷要素をフェードインする必要がありますが代わりに、それはすぐにフェードイン...なぜ?

誰でも手助けできます。おかげ

答えて

9

は、あなたがやりたいために、あなたは匿名関数でjQueryのものをラップする必要があります。

setTimeout(function() { 
    $('#loading').fadeIn('slow'); 
}, 9999); 

setTimeout機能(および同様setInterval)は、遅延の後に何をすべきかを告げなければなりません。これはevalを使用し、かなり醜い得ることができますので、それはありません

setTimeout('$("#loading").fadeIn("slow")', 9999); 

evalそれがなければならないことはJavaScriptの文字列で
  1. :そして、何をすべきか、それを伝えるための唯一の3つの方法がありますお勧めします。しかし、それは正常に動作します。私はsetTimeout(test(), 9999)をしませんでした

    var test = function() { 
        $('#loading').fadeIn('slow'); 
    }; 
    
    setTimeout(test, 9999); 
    

    注:機能参照して

  2. 。私はちょうどそれに機能の名前を付けました。

  3. 私は上記の最初のコードブロックで行ったことですが、オンザフライで構築する無名関数を使用します。

あなたがsetTimeout(test(), 9999)ような何かをしようとすると、ブラウザは最初がtest()を実行し、その後setTimeout戻り値を与えるます。だからあなたの試みで...

setTimeout($('#loading').fadeIn('slow'), 9999); 

...ブラウザは、そのjQueryのものを実行していた#loading要素をフェードインし、その後setTimeoutにどんなfadeInリターンを与えます。それが起こると、fadeIn関数はjQueryオブジェクトを返します。しかし、setTimeoutはオブジェクトの扱いを知らないので、9999ミリ秒後に何も起こらないでしょう。

3

setTimeoutは、ファンクションを最初のパラメータとして受け取ります。現在は、fadeIn操作を実行する評価を受けるjQueryセレクタを渡しています。代わりに、無名関数を渡してください:

setTimeout(function() { 
$('#loading').fadeIn('slow'), 9999); 
}, 9999); 
+0

文法に小さな誤りがある場合は、自分自身でこれを修正したnon-js-addictsの目に答えを明確にするように編集する必要があります。) それ以外の場合は、 – red

4

settimeout()関数はjavascriptに由来し、引数としての関数を取ります。

jQuery(document).ready(function() 
{ 
    $('#loading').delay(9999).fadeIn('slow'); 
}); 

詳しい情報/ exemples:http://api.jquery.com/delay/

1

ます。また、(jQueryの.delayを使用することができます)

最良の選択は、jQueryの組み込み遅延()関数を使用することです。

$( '#loading')。遅延(9999).fadeIn( 'slow');