web-dev-qa-db-fra.com

jquery - fonction dans la fonction $ (document) .ready

Est-il correct de créer des fonctions à l'intérieur de

$(document).ready(function() {

ainsi :

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

     }
 });

La fonction à l'intérieur de la .ready() n'a pas besoin d'appeler avant que dom soit prêt et l'événement à l'intérieur de la ready() est déclenché.

Juste pour clarifier un peu - voici le code qui illustrerait le problème:

$(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

La fonction que je dois appeler a besoin de la valeur mise à jour de la variable ind - que je suppose que je pourrais passer en paramètre, mais y a-t-il une meilleure façon de le faire?

De plus - une autre chose importante est que la function() en question peut également changer la valeur de la variable ind - par exemple en l'incrémentant (ind++).

27
user398341

Oui, vous pouvez le faire, c'est juste une question de portée; si vous avez seulement besoin d'accéder à callMe() à partir de $(document).ready(function() { }), alors c'est bien d'y placer la fonction, et offre des avantages d'architecture car vous ne pouvez pas accéder à la fonction en dehors de ce contexte. Si vous devez cependant utiliser la fonction callMe () en dehors du document, vous devez définir la fonction callMe () en dehors de ce contexte.

function callMe() {
  // Do Something
}

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

MISE À JOUR

Sur la base de votre clarification, vous avez deux options:

1) DECLARE la variable en dehors de ready (), mais définit ensuite la variable à l'intérieur de ready ()

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

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

2) Dans ready, définissez les variables à l'aide de window.yourVariable = 'whatever';

45
Mike Richards

Cela fonctionnera également.

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

callMe();

Si tu utilises

 var callMe = function () { ... }

Cela peut ne pas fonctionner et vous pouvez obtenir une erreur "la fonction n'est pas définie"

4
Daniel James Canil

Lorsque vous créez une fonction dans $(document).ready, il est garanti qu'elle ne sera pas appelée avant le chargement du document. Bien sûr, il ne peut être appelé qu'à partir de ce gestionnaire d'événements lui-même (quelque part plus tard dans le gestionnaire d'événements).

En d'autres termes, ce que vous essayez de faire est valide (mais pas nécessairement souhaitable - vous devez en révéler davantage sur ce que vous essayez d'accomplir).

2
Tomas Kohl

Vous pouvez faire comme ça:

$(document).ready(function(){

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

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

});

Ainsi, vous n'avez pas besoin de mettre la fonction en dehors du document prête et le code devient groupé et plus organisé. ;)

2
rntperes

C'est probablement une meilleure idée d'appeler la fonction directement comme ceci:

$(document).ready(myFunction);

function myFunction() {

   // Your code here

}
0
soulBit

Voyez si vous pouvez éliminer la nécessité d'utiliser document.ready en déplaçant votre balise au bas du fichier html. Cela devrait rendre les choses beaucoup plus simples. Sinon, déclarez la fonction en dehors de la portée du document.ready et appelez-la simplement dans la portée de la fonction document.ready.

0
Manas Yadav

C'est définitivement légal. La question est pourquoi voulez-vous le faire? Probablement pour lier la portée de la fonction à celle de ready et ne pas la lier globalement à l'objet window. Mais est-ce vraiment ce que tu veux? Je suggère de jeter un oeil sur les fermetures de fonctions en javascript et comment il gère la portée. pour aider à clarifier la nécessité de celui-ci ...

0
PhD