Variable globale javascript
Fermé
KaTa_TaKa
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
-
22 janv. 2009 à 09:40
bilal - 16 janv. 2014 à 23:54
bilal - 16 janv. 2014 à 23:54
A voir également:
- Variable globale javascript
- Telecharger javascript - Télécharger - Langages
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
10 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
22 janv. 2009 à 13:00
22 janv. 2009 à 13:00
Salut,
dans tous les cas, si tu déclares une variable sans var, elle sera globale.
Autrement, si tu déclares une variable avec var, elle est locale au bloc dans lequel elle est déclarée, ex. :
n sera locale à la fonction foo. Si tu utilises var à la "racine" de ton script, elle est en fait locale à window, ce qui est équivalent à globale.
Ton problème vient, je pense, d'un changement de portée. Par exemple :
Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
En tout cas, j'ai fait des tests avec un tableau, déclaré avec ou sans new, ça ne change rien. Ce n'est pas parce que c'est un tableau qu'il est "plus facilement" global.
Refais tes tests, et donne-moi des nouvelles ;)
dans tous les cas, si tu déclares une variable sans var, elle sera globale.
Autrement, si tu déclares une variable avec var, elle est locale au bloc dans lequel elle est déclarée, ex. :
function foo() { var n; // ... }
n sera locale à la fonction foo. Si tu utilises var à la "racine" de ton script, elle est en fait locale à window, ce qui est équivalent à globale.
Ton problème vient, je pense, d'un changement de portée. Par exemple :
i = 7; function change() { var i = 5; // ici i == 5 } // ici i == 7
Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
function def() { var i = 11; } alert(i); // ici, i n'est plus à portée
En tout cas, j'ai fait des tests avec un tableau, déclaré avec ou sans new, ça ne change rien. Ce n'est pas parce que c'est un tableau qu'il est "plus facilement" global.
Refais tes tests, et donne-moi des nouvelles ;)
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
22 janv. 2009 à 15:58
22 janv. 2009 à 15:58
Eh bien, c'est la "zone", ou encore la "portée" de la variable, son "degré de localité". Je ne sais pas comment l'expliquer bien … Petit schéma :
Une variable locale à un niveau n'est pas visible au niveau supérieur, par exemple ici a n'est pas visible depuis le niveau global, et b n'est visible ni par le niveau machin ni par le niveau global.
Regarde ceci : https://performance.survol.fr/2008/05/portee-des-variables-javascript/
;)
// niveau global function machin () { // niveau de la fonction machin var a; while (...) { // niveau de la boucle while var b; } }
Une variable locale à un niveau n'est pas visible au niveau supérieur, par exemple ici a n'est pas visible depuis le niveau global, et b n'est visible ni par le niveau machin ni par le niveau global.
Regarde ceci : https://performance.survol.fr/2008/05/portee-des-variables-javascript/
;)
Les variables déclarées tout au début du script, en dehors et avant toutes fonctions (voir plus loin...), seront
toujours globales, qu'elles soient déclarées avec var ou de façon contextuelle. On pourra donc les exploiter
partout dans le script.
Dans une fonction, une variable déclarée par le mot clé var aura une portée limitée à cette seule fonction. On ne
pourra donc pas l'exploiter ailleurs dans le script. D'où son nom de locale. Par contre, toujours dans une
fonction, si la variable est déclarée contextuellement (sans utiliser le mot var), sa portée sera globale.
Nous reviendrons sur tout ceci dans l'étude des fonctions.
toujours globales, qu'elles soient déclarées avec var ou de façon contextuelle. On pourra donc les exploiter
partout dans le script.
Dans une fonction, une variable déclarée par le mot clé var aura une portée limitée à cette seule fonction. On ne
pourra donc pas l'exploiter ailleurs dans le script. D'où son nom de locale. Par contre, toujours dans une
fonction, si la variable est déclarée contextuellement (sans utiliser le mot var), sa portée sera globale.
Nous reviendrons sur tout ceci dans l'étude des fonctions.
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
22 janv. 2009 à 18:33
22 janv. 2009 à 18:33
Bof … moi j'ai jamais recours aux cookies, je trouve ça trop instable. Les sessions PHP ont été conçues pour faciliter le passage des données entre les pages, autant s'en servir !
Et là l'argument est d'autant plus fort que JavaScript ne sert vraiment pas à ça.
Ça te simplifiera la vie, tu verras ;)
Et là l'argument est d'autant plus fort que JavaScript ne sert vraiment pas à ça.
Ça te simplifiera la vie, tu verras ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
on peut utiliser un hidden input, qu'on peut modifier la valeur par javascript.
la valeur de ce variable sera globale
la valeur de ce variable sera globale
KaTa_TaKa
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
22 janv. 2009 à 14:56
22 janv. 2009 à 14:56
salut groarh !!
>>Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
>>Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
tu veux dire quoi par le terme "niveau" ?
>>Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
>>Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
tu veux dire quoi par le terme "niveau" ?
KaTa_TaKa
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
22 janv. 2009 à 16:01
22 janv. 2009 à 16:01
oui cela je l'avais compri mais je parlais par rapport à mon code ...
je vais essayer de mieux expliquer mon code :
alors j'ai une page accueil.php (faites pas attention à la syntaxe0) :
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<script language="javascript">
i=0;
tableau= new array();
function charger(para){
i=para;
grace à cette fonction je met des valeur dans ma page ( grace à document.getElementById
) les données sont enregistré dans la variable tableau que j'ai alimenter avec une autre fonction ...
(cela marche tres bien ... )
}
function recuperer(repertoire){
repertoire = tableau[i][3]; // tableau[i][3] contien la valeur de mon repertoire
return repertoire;
}
</script>
<body>
....
<?php
switch($_GET['lien']){
case "abum":
include("album.php");
break;
case "galerie":
include("galerie.php");
break;
}
?>
....
</body>
qd je suis sur la page "accueil.php?lien=galerie" (c'est toujours la mm page mais dans body je charge galerie.php) j'ai un lien :
<a href="accueil.php?lien=">lien</a>
dans ma page
"accueil.php?lien=album" j'ai
<?php
echo "<scripte language="javascript">"
echo "repertoire = recuperer(repertoire);";
echo "</script>";
?>
<body onLoad(charger(para))>
// le parametre para incremente ou decremente grace à des fonction javascript qui marche bien
....
....
</body>
voila voila j'espere que j'etais clair si vous ne comprenez pas vous me dites ... merci d'avance
je vais essayer de mieux expliquer mon code :
alors j'ai une page accueil.php (faites pas attention à la syntaxe0) :
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<script language="javascript">
i=0;
tableau= new array();
function charger(para){
i=para;
grace à cette fonction je met des valeur dans ma page ( grace à document.getElementById
) les données sont enregistré dans la variable tableau que j'ai alimenter avec une autre fonction ...
(cela marche tres bien ... )
}
function recuperer(repertoire){
repertoire = tableau[i][3]; // tableau[i][3] contien la valeur de mon repertoire
return repertoire;
}
</script>
<body>
....
<?php
switch($_GET['lien']){
case "abum":
include("album.php");
break;
case "galerie":
include("galerie.php");
break;
}
?>
....
</body>
qd je suis sur la page "accueil.php?lien=galerie" (c'est toujours la mm page mais dans body je charge galerie.php) j'ai un lien :
<a href="accueil.php?lien=">lien</a>
dans ma page
"accueil.php?lien=album" j'ai
<?php
echo "<scripte language="javascript">"
echo "repertoire = recuperer(repertoire);";
echo "</script>";
?>
<body onLoad(charger(para))>
// le parametre para incremente ou decremente grace à des fonction javascript qui marche bien
....
....
</body>
voila voila j'espere que j'etais clair si vous ne comprenez pas vous me dites ... merci d'avance
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
22 janv. 2009 à 16:10
22 janv. 2009 à 16:10
Je crois que j'ai compris : à un moment tu recharges ta page avec une requête GET. À ce moment là, peu importe que ce soit la même page, il y a rechargement, donc toutes tes variables disparaissent.
KaTa_TaKa
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
22 janv. 2009 à 16:23
22 janv. 2009 à 16:23
est ce que tu sur que c'est à cause de ça ? et si c'est le cas ... comment est ce que je peux faire pour recuperer une donnée qd on recharge la page ? j'ai deja pensé à utiliser les coukies mais je sais pas c'est une bonne technique ...
Merci pour ton aide
Merci pour ton aide
KaTa_TaKa
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
23 janv. 2009 à 09:36
23 janv. 2009 à 09:36
salut tout le monde !!!
j'ai utilisé les cookies et ça matche nickel ... je sais pas si c'est propre ( techniquement parlant ) mais en tout cas ça marche ...
j'ai utilisé les cookies et ça matche nickel ... je sais pas si c'est propre ( techniquement parlant ) mais en tout cas ça marche ...