IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

portée des variables globales dans un fichier js


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut portée des variables globales dans un fichier js
    Bonjour,

    Voilà je pensais qu'en déclarant les variables et en écrivant les fonctions dans un fichier js, cela aurait permis de conserver leur valeur affectée par une fonction lors d'un changement de page mais apparemment ce n'est pas le cas ..

    Pour faire simple :

    dans un fichier js, je déclare une variable globale et j'écris deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var a = 'king'
    function tentative() {
    a = 'kong';
    alert(a);
    }
    function tentative_desesperee() {
    alert(a);
    }
    Si dans une page html appelée page1.html j'appelle successivement ces deux fonctions, j'obtiens le résultat attendu, soit "kong" dans les deux messages.

    Par contre si je charge une nouvelle page (et que cette page appelle la fonction tentative_desesperee()) avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.location="page2.html
    après avoir appelé la fonction tentative(), je m'attend à ce que la variable 'a' ait été modifiée et je pense donc que la nouvelle page va afficher 'kong'.
    Malheureusement, elle affiche 'king' ce qui montre que la modification de la valeur de la variable ne perdure pas d'une page à l'autre.

    Est-ce que je suis alors obligé d'utiliser des cookies pour conserver la valeur modifiée des variables ?

  2. #2
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    la portée d'une variable JS est dans une meme page et pour conserver la valeure d'une variable entre les pages il te faut soit le transmettre par URL ou par variable de session ou les cookies.

    _____________________
    Il n'y a pas de choses urgentes, il n'y a que des choses en retard

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci amika, je vais essayer tout ça.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    J'emprofite de ce post pour poser une petite question. Peut-on utiliser une variable globale dans toute une page HTML (même en dehors des balises SCRIPT). J'ai essayer mais ma page semble ne pas reconnaître ma variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <html>
     
    <head>
     
    <script language="Javascript">
    var i=0;
    var tableau = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg"];
    </script>
     
    </head>
     
     
    <body>
     
    <a href="javascript:;"
    onClick="document.image.src=tableau[i++];">
    <img name="image" src="1.jpg" alt="mon_image"/></a>
     
    </body>
     
    </html>
    Que je mette i=0 ou i=5, cela ne change absolument rien. Mais je croyais qu'on pouvait utiliser une variable globale n'importe où dans la page !! Si vous pourriez me renseigner sur ce point ce serait sympa.

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    J'emprofite de ce post pour poser une petite question. Peut-on utiliser une variable globale dans toute une page HTML (même en dehors des balises SCRIPT). J'ai essayer mais ma page semble ne pas reconnaître ma variable :
    essaye comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <html>
     
    <head>
     
    <script language="Javascript">
    var i=0;
    var tableau = new Array("i1.jpg", "i2.jpg", "i3.jpg", "i4.jpg", "i5.jpg", "i6.jpg");
     
    </script>
     
    </head>
     
     
    <body>
     
    <h3>1er exemple</h3>
    <img name="image" src="i1.jpg" alt="mon_image" onClick="this.src=tableau[++i];">
     
    <br><br>
    <h3>2eme exemple</h3>
    <a href="javascript:;"onClick="document.getElementById('idImg').src=tableau[++i];">
    <img id="idImg" src="i1.jpg" alt="mon_image"/></a>
     
    </body>
     
    </html>
    avec une préférence pour le 1er cas. Autant mettre l'événement onclick dans la balise img.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    voilà j'ai cherché un peu partout la méthode pour utiliser une variable de session (pour JavaScript) mais j'ai pas trouvé .

    Est-ce que quelqu'un pourrait me dire comment la déclarer, comment l'utiliser, éventuellement à l'aide d'un exemple simple de script ?

  7. #7
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    si vous utilisez seulement du javascript vous ne pouvez pas utiliser les variables des session (possible avec PHP par exemple)

    _____________________
    Il n'y a pas de choses urgentes, il n'y a que des choses en retard

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    C'est encore moi, donc j'essaye de faire passer mes variables via l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script language="JavaScript">
    var variable1 = "king";
    var variable2 = "kong";
    </script>
    <a href="page.html?variable1&variable2">go</a>
    Le code de la page 'page.html' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="JavaScript">
    recup = location.search;
    recup = recup.substring(1, recup.length);
    variables = recup.split('&');
    document.write(variables[0] + " " + variables[1]);
    </script>
    Voila le problème, au lieu d'afficher king kong, j'affiche variable1 variable2

    Qu'est ce qui cloche dans ce script ?

    merci

  9. #9
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    pour passer des variables par url tu dois faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page.html?v1=valeur1&v2=valeur2">go</a>

    _____________________
    Il n'y a pas de choses urgentes, il n'y a que des choses en retard

  10. #10
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    pour etre plus claire:
    dans la premiere page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page.html?v1=valeur1&v2=valeur2">go</a>
    tu peux faire dans l'autre page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script language="JavaScript"> 
    recup = location.search; 
    recup = recup.substring(1, recup.length); 
    variables = recup.split('&'); 
    v1 =variables[0].split('=');
    v2 =variables[1].split('=');
    document.write(v1[0]+":"v1[1] + " ,  " v2[0]+":"v2[1]); 
    </script>

    _____________________
    Il n'y a pas de choses urgentes, il n'y a que des choses en retard

  11. #11
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    C'est même dans la

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci pour tes réponse, amika et aussi pour la faq ..

    J'ai l'impression cependant que l'on ne peut pas, de cette façon, passer directement des variables dans l'url, comme j'essayais de le faire.
    En effet, valeur1 ou valeur2 doivent représenter les valeurs des variables et pas les variables elles-mêmes.

    C'est un peu embêtant car je voulais passer un tableau comme variable via l'url, et je crois que ça ne va pas être possible.

  13. #13
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par crakazoid
    C'est un peu embêtant car je voulais passer un tableau comme variable via l'url, et je crois que ça ne va pas être possible.
    variable1=a1;a2;a3

    ensuite un split dessus.

    De toute façon, le principe du HTTP c'est toujours une chaine = une chaine.

    Il n'y a pas de concept de tableau, d'objet, de type ou autre. Que des chaines de caractères. A toi de transformer ton tableau en chaine (avec le bon séparateur). A priori, un simple join ou quelque chose comme ça fera l'affaire

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Ok merci

    cette fois ça va marcher ..

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Bon je crois que j'ai été un peu vite en besogne.

    car même si mon tableau est transformé en chaîne (que je vais stocker dans une variable), je me retrouve devant le problème précédent : on ne peut pas passer une variable via l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tableau = new Array(5,6,12,15);
    chaine = tableau.join();
    chaine contiendra donc "5,6,12,15"

    mais je ne peux toujours pas écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page.html?variable1=chaine">go</a>
    car je ne ferais que récupérer la chaîne "chaine" et pas "5,6,12,15" comme je le voudrais.

    ...

  16. #16
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    et comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <script type="text/javascript" >
     
    monUrl = function () {
        tableau = new Array(5,6,12,15); 
        chaine = tableau.join();
        return "page.html?variable1=" + chaine;
    }
    </script>
     
    <a href="javascript:monUrl();" >go</a>
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  17. #17
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut escape
    Il me semblerait judicieux de faire un escape/unescape pour éviter les pb du tranfert HTTP...
    Fremy
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  18. #18
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function ajouteTableau(chaine) {
      tableau = new Array(5,6,12,15);
      chaine += chaine.indexOf("?")>-1?"&":"?";
      chaine += "variable1=";
      chaine += tableau.join();
      return chaine;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page.html" onclick="this.href=ajouteTableau(this.href)">go</a>
    Ca devrait le faire.....

    Pour le escape/unescape, effectivement, il faudrait. Mais dans ton exemple, ça devrait déjà marcher comme ça.

    ...[/quote]

  19. #19
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci à tous, cette fois-ci ça marche, testé et approuvé !!!!
    Il fallait donc passer par une fonction.

    Vraiment efficace ce forum et ses intervenants.

  20. #20
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par crakazoid
    Vraiment efficace ce forum et ses intervenants.
    Vive DVP


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2008, 16h47
  2. Initialisation des variables globales dans un package
    Par fred_hte_savoie dans le forum SQL
    Réponses: 2
    Dernier message: 17/04/2007, 10h26
  3. [PHP-JS] comment recupérer des variables javascript dans un fichier php
    Par domino_dj dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2007, 11h46
  4. Réponses: 12
    Dernier message: 27/01/2006, 11h07
  5. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo