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++
).
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';
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"
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).
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é. ;)
C'est probablement une meilleure idée d'appeler la fonction directement comme ceci:
$(document).ready(myFunction);
function myFunction() {
// Your code here
}
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.
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 ...