2011-05-17 11 views
5

私はこの形をとったネットのどこかで、上のいくつかのjqueryのコードを見た:すなわち、それは内部の$(ドキュメント).readyを持っている外部関数(「doSomethingの」)

<script>    
function doSomething(message) 
{ 
    $(document).ready(function(){  
     alert(message); 
     }); 
}; 
</script> 

を。 DOMがロードされたときに$(document).readyの下にあるコードが起動していないので、私は混乱していますか?そのようなイベントハンドラは、関数(?)の中にあります。この形式のコードは誰にも意味がありますか?ありがとう。

答えて

4

元のコーダーの部分ではおそらくエラーでした。 になる可能性がありますが、早めにdoSomethingと呼ぶことをお勧めします。 readyを呼び出すときにDOMが既に準備されている場合、jQueryはコードを呼び出してどちらかの方法で発生しますが、誰かがどこかでdoSomethingを呼び出すまでは発生しません。私はパターンに多くの目的を見ることができないので、それを使用するための強力な議論がある場合を除き、  —と質問がありますが、あなたはそう思わないでしょう:-)   —あなたは無視しても問題ありません。

+0

を私が知っているこれは古いですが、私あなたは、ページが起動されたときにXML/JSONファイルを呼び出すことを望んでおり、その関数の完了時にいくつかのDOM要素を受け取った応答で更新するとします。その応答がページの読み込みよりも速く、DOM要素まだロードされていない、彼らは更新されていない。Could doSomething()成功のコールバックであり、このように働くことができますか?だから、もし早く完了すれば、すべてはまだ動作しますか? – iLLin

+2

@ iLLin:これは完全に合理的な使用例です。だから、あなたは成功のコールバックで 'ready'を使って、ドキュメントの中で非常に高いスクリプト(' head'では、私は思うでしょう)を使ってAjaxリクエストをトリガーします。完璧に合理的です。私はあなたが 'body'タグの一番下にスクリプトを置いた場合(そして' ready'を気にする必要はないでしょう)、AJAXリクエストが*ロット*ですぐに起こるかどうかは確信していませんが、ブラウザにあなたがしたいことを早期に知らせることに害を与えます。 –

+0

これは私の場合です。 – miguelsan

3

この形式のコードは誰にも意味がありますか?

いいえ、そうではありません。

8

意味があります。 $(document).readyは、DOMが完全にロードされたときに起動されるイベントハンドラを登録します。それに渡される無名関数は、そのハンドラです。 DOMがロードされた後にそのハンドラを登録すると、すぐに起動されます。

DOMが完全にロードされる前にJavascriptを実行することができるので、この関数はDOMがロードされる前に表示されないメッセージを実際に登録します。 DOMが完全にロードされる前にメッセージを表示したくない場合は、この構文を使用できます。

+1

+1何らかの理由で登場しました。 :-) –

+0

ええ、私は理由の確かに正確ではない。たぶん、元のコーダーは、メッセージが表示されたときにページのレンダリングを停止するブラウザーを見つけました。そのようなことが起こると、ユーザーは、メッセージが閉じられるまで、半分にレンダリングされたページを見ています。これが実際に起こるかどうか試してみてください。 – GolezTrol

1

$(document).ready();基本的に、DOMの準備ができたときに実行される関数を登録します。しかし、この場合、プログラマーは関数内でこれをネストしていました。つまり、doSomething()関数を呼び出すまでは.ready()に追加されません。あなたのHTMLのさまざまな部分で

<script type="text/javascript"> 
    function doSomething(){ 
     $(document).ready(function(){ 
      alert('here'); 

     }); 
    } 
    doSomething(); 
</script> 

置き、これをして(それをチェックアウト:

次でそれを試してみることができます!

乾杯を

関連する問題