web-dev-qa-db-ja.com

jquery-$(document).ready関数内の関数

内部に関数を作成するのは正しいですか

_$(document).ready(function() {
_

そのようです :

_$(document).ready(function() {
     function callMe() {

     }
 });
_

.ready()内の関数は、domが準備されてready()内のイベントがトリガーされる前に呼び出す必要はありません。

少し明確にするために、問題を説明するコードを次に示します。

_$(function() {
    var ind = 0;

    // some event is executed and changes the value of the ind

    // another event which affects the ind variable

    // and another one - after this event we call our function


    // there's another event - and we call our function again
_

呼び出す必要がある関数には、ind変数の更新された値が必要です-パラメーターとして渡すことができると思いますが、それを行うより良い方法はありますか?

また、別の重要なことは、問題のfunction()ind変数の値を変更できることです-たとえば、インクリメントします(_ind++_)。

27
user398341

はい、あなたはそれをすることができます、それはただ範囲の問題です。 callMe()内から$(document).ready(function() { })にのみアクセスする必要がある場合は、関数をそこに配置しても構いません。また、そのコンテキスト外では関数にアクセスできないため、アーキテクチャ上の利点があります。ただし、ドキュメントの外部でcallMe()関数を使用する必要がある場合は、そのコンテキストの外部でcallMe()関数を定義する必要があります。

function callMe() {
  // Do Something
}

$(document).ready(function() {
  callMe();
});

[〜#〜] update [〜#〜]

明確化に基づいて、2つのオプションがあります。

1)ready()の外側で変数を宣言するが、ready()の内側で変数を定義する

var someVariable;
function callMe() {
  someVariable++;
  alert(someVariable);
}

$(document).ready(function() {
  someVariable = 3;
  callMe(); // Should display '4'
});

2)ready内で、window.yourVariable = 'whatever';を使用して変数を定義します

45
Mike Richards

これも機能します。

$(document).ready(function() {
      callMe = function() {
            alert('hello');
      }
});

callMe();

使用する場合

 var callMe = function () { ... }

動作せず、「関数が定義されていません」というエラーが表示される場合があります

4

$(document).ready内に関数を作成すると、ドキュメントがロードされる前に呼び出されないことが保証されます。もちろん、イベントハンドラー自体(イベントハンドラーの後半のどこか)からのみ呼び出すことができます。

言い換えれば、あなたがやろうとしていることは有効です(必ずしも望ましいわけではありません-あなたが達成しようとしていることについてもっと明らかにする必要があります)。

2
Tomas Kohl

あなたはそのようにすることができます:

$(document).ready(function(){

    var callMe = function(){
       //enter code here
    }

    $(".my-class").on("click", function(){
       callMe();
    });

});

そのため、ドキュメントの外部に関数を用意する必要はなく、コードはグループ化され、より整理されます。 ;)

2
rntperes

次のように関数を直接呼び出すことをお勧めします。

$(document).ready(myFunction);

function myFunction() {

   // Your code here

}
0
soulBit

タグをhtmlファイルの最後に移動して、document.readyを使用する必要性を排除できるかどうかを確認してください。これにより、物事がずっと簡単になります。それ以外の場合は、document.readyのスコープ外で関数を宣言し、document.ready関数スコープで呼び出すだけです。

0
Manas Yadav

これは間違いなく合法です。問題は、なぜそれをしたいのかということです。おそらく、関数のスコープをreadyのスコープにバインドし、ウィンドウオブジェクトにグローバルにバインドしないようにします。しかし、それはあなたが本当に欲しいものですか? JavaScriptの関数クロージャーと、それがスコープをどのように処理するかを確認することをお勧めします。必要性を明確にするために...

0
PhD