Bonjour à tous,
j'ai décidé de séparer mon gros javascript en plusieurs petits fichiers pour pouvoir mieux gérer mon code, mais je suis confronté à un problème tout bête.. L'appel effectué dans le js1 vers la fonction contenu dans le js2 me renvoie une erreur : function is not defined.
Voilà un code d'exemple :
index:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script src="js1.js"></script>
<script src="js2.js"></script>
js1:
$(document).ready(function() {
sayHello();
});
js2:
$(document).ready(function() {
function sayHello(){
alert('hello');
}
});
Je vous remercie d'avance pour vos réponses !
Les fichiers JS sont interprétés au fur et a mesure de leur inclusion dans la page html.
Lorsqu'il arrive a l'appel d'une fonction dans js1, si la fonction est déclarées dans js2 (qu'il n'a pas encore lu), il n'est pas au courant que celle-ci existe. En inversant les fichier tu résoudras effectivement ce problème.
Bonjour, la solution que vous donnez ne change rien, la fonction est toujours non définit dans la console.
Pas la peine de mettre ta fonction dans un ready() dans js2. Visiblement elle ne sera jamais utilisée telle quelle mais sera appelée par des fonctions de js1.
Et js2 doit être en premier en effet.
Tout d'abord, il faut effectivement faire comme Vallyan te la suggérer, à savoir mettre js2 avant js1.
Ensuite, fait un alert("test"); dans ton $(document).ready pour voir si ton jquery est bien inclus. Si tu ne vois pas ton alert, c'est que tu as un problème avec jquery. Dans le cas contraire, enlève ton alert, et fait la suite :)
Et pour finir, il faudrait mettre ta fonction en dehors du $(document).ready , car que le document soit chargé ou non, ta fonction doit être présente. C'est seulement au moment de l'appel de cette fonction qui doit être dans cette partie de code.