2009-06-18 10 views
1

Je suis en train d'avoir un rappel appeler une fonction à l'intérieur $ (document) .ready (..)fonction jQuery appelant

Comment appeler une fonction de l'extérieur cela?

Comme par exemple:

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

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

Vous cherchez à appeler bar() depuis $ (document) .ready() ou en dehors de celui-ci (où vous mettez le commentaire)? Voir la réponse de jdangel pour l'intérieur. – Mark

+3

Cela semble contre-intuitif. Pourquoi ne pas déclarer la fonction en dehors de $ (document) .ready() et ensuite appeler la fonction depuis le $ (document) .ready()? – jacobangel

+0

@Mark .. en dehors de cela ... –

Répondre

5

Cela dépend de la façon dont vous voulez les choses de portée. Si vous voulez juste barre à portée globale, puis faites ceci:

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

Rappelez-vous, en JavaScript les seuls blocs de code qui ont la portée des fonctions, donc les variables déclarées dans if{}, while{}, et d'autres types de les blocs de code sont globaux à toute fonction dont ils font partie, à moins qu'ils ne soient déclarés.

Si vous utilisez une variable sans la déclarer, qui est la même chose que faire:

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

Ainsi, l'exemple ci-dessus pourrait être une ligne plus courte en faisant:

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

cela a le même effet que simplement omettre le "var" avant "bar" – llimllib

+1

Merci beaucoup Dan! –

+0

Bien que cela fonctionne, comment est-ce différent de supprimer le $ (document) .ready() entièrement et simplement en déclarant cela en dehors:/* $ (document) .ready (function (foo) {*/window.bar = function () {...};/*}); */ – jacobangel

0

Vous pouvez déclarer bar en dehors de votre fonction prête. Ce sera global alors.

var bar; 

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

N'est-ce pas global même sans cette déclaration en haut? – Nosredna

+2

@Nosredna: les globals implicites ont tué mes parents – Jimmy

0

Si vous voulez appeler bar() de l'extérieur, pourquoi ne pas vous déclarez juste à l'extérieur, en lui transmettant tout paramètres dont vous avez besoin de la portée intérieure?

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

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

Ne pas déclarer tout à l'intérieur de la fonction prêt

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

function bar() { 
    ... 
} 
0

Après avoir lu votre commentaire, peut-être que vous voulez faire quelque chose comme ça. Utilisez myUtilities pour minimiser la pollution de l'espace de noms global si vous souhaitez accéder à des éléments à l'intérieur et à l'extérieur de votre ready.

var myUtilities={}; 

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

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

Désolé, non testé. Peut-être une erreur de syntaxe stupide ou deux là-dedans.

Questions connexes