63 votes

Pourquoi ne puis-je pas définir de fonctions dans le document.ready () de jQuery?

Les fonctions sont indéfinies si je les place dans la fonction document.ready ():

 $(document).ready(function(){
  function foo()
  {
    alert('Bar');
  }
});

foo(); // Undefined
 

Pourquoi cela arrive-t-il? Je suis sûr que j'ai juste besoin d'une compréhension simple :)

70voto

RichieHindle Points 98544

Pas sûr pourquoi, la définition de la fonction dans le champ d'application de l' ready() est important pour vous, mais vous pouvez le faire fonctionner en déclarant foo à l'avant:

<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script>
var foo;                           // Here's the difference
$(document).ready(function(){
  foo = function ()
  {
    alert('Bar');
  }
});
</script></head><body>
<input type="button" onclick="foo()" value="Click me">
</body></html>

Évidemment, vous ne pouvez pas appeler foo() à partir du script en ligne immédiatement après l' ready() parce que l' ready() code n'a pas encore été exécuté, mais vous pouvez appeler la fonction plus tard.

Assurez-vous que rien ne peut essayer d'appeler foo() avant l' ready() code a exécuter (ou de faire la déclaration initiale de foo() inoffensives de la fonction).

24voto

Soviut Points 26384

Vous pouvez le faire, mais ils doivent être appelés dans le cadre de la méthode ready() , sinon ils perdent la portée lorsque la méthode ready() termine.

Par exemple, le code ci-dessous fonctionnera:

 $(document).ready(function(){
  function foo()
  {
    alert('Bar');
  }

  foo(); // still in the scope of the ready method
});
 

7voto

Nick Berardi Points 31361

Ils apparaîtront comme indéfinis si vous les mettez dans un champ qui n'est pas le leur. Si vous voulez vraiment les utiliser en dehors de la portée de $ (document) .ready (...), vous devez les déclarer en externe. Tel que:

 var foo;

$(document).ready(function(){
  foo = function()
  {
    alert('Bar');
  }
});

foo(); // works now because it is in scope
 

J'espère que cela t'aides.

4voto

Stefan Gehrig Points 47227

Votre fonction est définie dans le cadre du rappel $(document).ready() et ne peut être vue de l' extérieur . Soit définir la fonction en dehors de la portée de $(document).ready() de l’appel uniquement de l’intérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X