2012-02-15 8 views
0

質問はかなり主観的ですが、スタイルやアプローチは開発とは異なるかもしれませんが、かなり固い基準があるので、私はこの基準に従っていないと確信しています。関数の中でjQueryを使用する適切な方法はありますか?

とにかく、jQueryライブラリを使用するjavascriptで関数を定義するとき、私は通常次のことを行います。

ので、なぜ私は上記を使用しています、私のために働いていない機能の中にjQueryを使用するためにこれを実行しようとすると、
function funcName() { 
    $(document).ready(function() { 
     // Do stuff 
    }); 
} 

$(document).ready(function() { 
    function funcName() { 
     // Do stuff 
    } 
}); 

関数内でjQueryを使用するための標準に準拠した/一般的な方法に関するコメント/ご質問は非常に高く評価されます。

編集:著しく愚かなレベルで私にこの質問をしました。私はjQueryを使い始めたので(実際に開発について何かを理解する前に)、私はいつも自分のコードをに入れて、それが実際の目的ではないと考えました。

これを閉じるには投票してください。

+0

* "これをしようとすると...うまくいきませんでした" *おそらく、2番目の例で動作しないコードについて質問する必要があります。 'funcName'を呼び出すインラインハンドラを使用していますか? –

+0

'$(ドキュメント)。ready() 'は実際にはページ読み込み時に実行される関数なので、これらの2つのアプローチは異なる結果をもたらします。あなたは何を達成しようとしていますか?具体的に。 – Shomz

+0

何か面倒なことをしない限り、 '$(document).ready(function(){})'(あるいは '$(function {){})')関数を別の関数ラッパー関数。 Shomzが述べたように、 '$(document).ready()'関数は、ページの読み込みが完了すると自動的に呼び出されるので、ラッパーは必要ありません。次に、実行する必要のあるプロシージャをready関数で呼び出します。 –

答えて

1

の問題は、あなたが呼び出すとき

$(document).ready(function(){ 
myFunc(); 
}); 
文書readyイベントが発火したらmyFuncというのと呼ばれる

(ページの準備ができているとき)。

しかし、そのブロックを関数に入れると、ラップ関数を呼び出すたびに呼び出され、それが遅すぎてdocument.readyイベントを聴くことができません。

ie。

function doSomething() 
{ 
    $(document).ready(function(){ 
     myFunc(); 
    }); 
} 

doSomething()を呼び出すと、myFunc()がページ準備完了イベントにバインドされます。しかし、あなたが何かをクリックしたときに呼び出す場合のように、page.readyイベントが発生した(ページがロードされた)後に呼び出すと、myFunc()は決して実行されません。

通常、最初の実装が最も優れていますが、通常は関数をすぐにイベントにバインドして応答する必要はありません。

1

何らかの理由でDOMロードで関数を定義する必要がある場合は、スコープ内の変数(この場合はwindow.myFunc)に関数を割り当てることができます。

$(document).ready(function() { 
    window.myFunc = function(){ 
     alert('myFunc'); 
    } 
}); 

ブラウザウィンドウごとに1つのウィンドウのインスタンスがあるため、どこからでも次のようにアクセスできます。ウィンドウの固有のメソッドを上書きしないように注意してください。

window.myFunc(); 

関数スコープherehereにいくつかの良い情報もあります。

0

(function($){/ do smth /})(jQuery);

関連する問題