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


Les fonctions apparaissent comme non dé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 :)


58
2018-06-28 21:02


origine


Réponses:


Pas sûr pourquoi définir la fonction avec dans le cadre de 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() du script en ligne immédiatement après ready() parce que le ready() le 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 le ready() le code a été exécuté (ou fait la déclaration initiale de foo() une fonction inoffensive).


61
2018-06-28 21:15



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

Par exemple, le code ci-dessous fonctionnera:

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

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

24
2018-06-28 21:05



Ils apparaîtront comme non définis si vous les placez dans une portée qui n'est pas la 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.


6
2018-06-28 21:18



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


4
2018-06-28 21:06



<script>
    $(document).ready(function(){
      myfnc = function (param1, param2)
      {
        alert('Hello');
      }
      myfnc();
    });
</script>
<input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me">

1
2017-09-06 07:01



Juste un autre ajout:

Lors de la déclaration de fonctions ou de variables à l'intérieur du $(document).ready() fonction, ceux-ci sont inaccessibles lors de l'utilisation onclick() lie dans le document.

Vous pouvez soit déplacer vos déclarations en dehors de $(document).ready(), ou vous pouvez utiliser $('#element').on('click', function() {}) dans `$ (document) .ready ().


0
2017-09-07 09:54