Page 1 sur 1

Variable externe à un script

Posté : 12 déc. 2007, 10:10
par Hermès
Salut tout le monde,

Je cherche depuis un moment à faire passer une variable à un javascript sans trouver vraiment comment faire.

Le principe est relativement simple : j'ai un script "truc.js" déclaré dans ma balise <head> et je veux pouvoir utiliser une variable optionnelle dans ce script sans toucher au script, cette variable étant déclarée dans le code html.

Donc en fait, ça donnerait ceci :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html"/> <title>Test</title> <script type="text/javascript"> maVariable = 42; </script> <script type="text/javascript" src="js/truc.js"/> </head> <body> ... </body> </html>
Le souci, c'est que j'arrive pas à accéder à cette variable dans mon fichier truc.js.
Y'a-t-il donc une méthode pour accéder à une variable javascript déclarée à l'extérieur de notre fichier js ?

Merci d'avance.[/code]

Posté : 12 déc. 2007, 11:30
par Ryle
Il faut déclarer tes variables javascript avec "var", que le code javascript soit dans la page ou dans un .js ne pose pas de problème :)

Code : Tout sélectionner

<script type="text/javascript"> var maVariable = 42; </script>
En principe, toutes les variables javascript sont globales, à moins d'être déclarées localement avec "var".
<script type="text/javascript"> 
var toto = 1;
var titi = 1;

function incremente() {
  toto++; // incrémente la variable globale
  var titi;
  titi++; // incrémente une variable locale
}

incremente(); // appel à la fonction
alert(toto); // affiche 2
alert(titi); // affiche 1, puisque non affecté par la fonction :)

Posté : 12 déc. 2007, 11:52
par Hermès
En fait je viens de tester et effectivement ça marche.

La raison qui faisait que ça ne fonctionnait pas chez moi c'est simplement parce que je passais par du jquery.

Le code suivant fonctionne bien :
HTML :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html"/> <title>Test</title> <script type="text/javascript"> var maVarExterne = "maVarExterne"; </script> <script type="text/javascript" src="js/test.js"/> </head> <body onload="start();"> </body> </html>
test.js :

Code : Tout sélectionner

var maVarInterne = "maVarInterne"; function start() { alert(maVarInterne); alert(maVarExterne); }
-> on a bien 2 popup successives qui vont afficher "maVarInterne" puis "maVarExterne".

Par contre, quand je passe par du jquery plutôt que par une fonction onload sur le body, ça ne fonctionne pas :

HTML :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html"/> <title>Test</title> <script type="text/javascript" src="js/jquery-1.2.1.min.js"/> <script type="text/javascript"> var maVarExterne = "maVarExterne"; </script> <script type="text/javascript" src="js/test.js"/> </head> <body> </body> </html>
test.js :

Code : Tout sélectionner

var maVarInterne = "maVarInterne"; $(document).ready(function() { alert(maVarInterne); alert(maVarExterne); });
-> il affiche bien une popup avec "maVarInterne" mais me pète une erreur "maVarExterne is not defined".

Donc mon problème évolue un peu vu que ça devient un problème de jquery et non de javascript...
Bref, y'a-t-il une méthode en jquery pour accéder aux variables externes ?

Par ailleurs, si je met la déclaration de la variable après l'inclusion du test.js, là il ne m'ouvre aucune popup et ne m'affiche pourtant aucune erreur. Bizarre...

Posté : 12 déc. 2007, 14:56
par Berzemus
tiens, j'ai jamais rencontré ce problème ..

(faut dire que j'ai le reflexe de créer un fichier "onload", avec dedans le document.onload, et juste avant la déclaration de toutes mes variables globlales, ceci expliquant cela.

Pour ce qui est de la notification d'erreur, c'est comme ça avec Jquery.
Il peut très bien se planter quelque part sans rien dire. Dans ce cas, je me résous avec des alert() pour voir exactement la ou il à du mal. (ça vient des fonctions anonymes sous JS, à mon avis).