2009-06-18 24 views
1

$(document).ready(..)内でコールバック関数を呼び出そうとしていますjQuery関数の呼び出し

これ以外の関数はどのように呼び出しますか?

例えば同様:

$(document).ready(function(foo) { 
    var bar = function() { ... }; 
}); 

// How do I call bar() from here? 
+0

bar()を$(document).ready()内またはその外側(コメントを置く場所)から呼び出したいとしますか? 内側のjdangelの答えをご覧ください。 – Mark

+3

これは直観に反しているようです。なぜ$(document).ready()の外で関数を宣言し、$(document).ready()の中から関数を呼び出すのでしょうか? – jacobangel

+0

@マーク..それの外に... –

答えて

5

スコープのものにしたいかによって異なります。

$(document).ready(function(foo) { 
    var bar = function() { ... }; 
    window.bar = bar; 
}); 

は、変数がif{}while{}で宣言されたように、スコープを持っている唯一のコードブロックは、機能しているJavaScriptで、覚えておいてください、そして、他の種類の:あなただけのバーがグローバルスコープになりたい場合は、単にこれを行いますコードブロックは、それらが宣言されていない限り、それらが部分的に機能するものすべてに対してグローバルです。

あなたはそれを宣言せずに変数を使用している場合、それはやってと同じです

// Both of these variables have global scope, assuming 
// 'bar' was never declared anywhere above this 
window.foo = "Hello World!"; 
bar = "Hello World!"; 

したがって、上記の例では、実行してラインに短くすることができます:

$(document).ready(function(foo) { 
    window.bar = function() { ... }; 
}); 
+2

これは単に "バー"の前に "var"を省略したのと同じ効果を持っています – llimllib

+1

ありがとうダン! –

+0

これはうまくいくが、これは$(document).ready()を完全に取り除いて単にこれを外に宣言することとどのように違うのだろうか:/ * $(document).ready(function(foo){*/window.bar = function ){...};/*}); */ – jacobangel

0

をあなたがバーを宣言することができます準備ができていない機能その後、グローバルになります。

var bar; 

$(document).ready(function(foo) { 
    bar = function() { ... }; 
}); 
+1

その宣言がなくてもグローバルではないのですか? – Nosredna

+2

@ノスレッドナ:暗黙のグローバルが私の両親を殺した – Jimmy

0

あなたが外からbar()を呼び出したい場合は、なぜあなたはちょうどあなたが内側の範囲から必要なものは何でもパラメータを渡し、外側にそれを宣言していませんか?

function bar(baz, qix) { ...}; 

$(document).ready(function(foo) { 
     bar(whatever, whatnot); 
     }); 
bar(something, else); 
2

あなたのコメントを読んだ後レディ機能

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

function bar() { 
    ... 
} 
0

の内部にすべてを宣言しないでください、多分あなたはこのような何かをしたいです。 readyの内外にアクセスしたい場合は、グローバル名前空間の汚染を最小限に抑えるためにmyUtilitiesを使用してください。

var myUtilities={}; 

$(document).ready(function(foo) { 
    myUtilities.bar = function() { ... }; 
}); 

// How do I call bar() from here? 
a = myUtilities.bar(); 

申し訳ありません。文法的に間違っているか、そこに2つあるかもしれません。

関連する問題