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 :

Visibilité variables globales


Sujet :

JavaScript

  1. #1
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut Visibilité variables globales
    Bonsoir à tous ,
    je suis persuadé d'avoir compris la portabilité des variables en javascript , et pourtant ...
    voici mon fichier html :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!DOCTYPE html>
    <html>
        <head></head>
    <body>
        <img id="marteau" src="marteau.png"/>
        <script src="variables.js"></script>
    </body>
    </html>
    Puis le fichier javascript afférent :
    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
     
    var marteau = false;
    var image = document.getElementsByTagName("img");
     
    for (var i = 0; i < IMGElems.length; i++)
    {
        IMGElems[i].onclick = handleClickEvent;
        IMGElems[i].isActive = true;
    }
     
    function handleClickEvent(e)
    {
        if(!marteau)
        {
            alert("marteau = " + marteau);
            marteau = true;
        }
    }
    Comme vous l'aurez deviné l'alerte ne se produit jamais en réponse au click sur l'image ?!
    Pourtant , si je ne m'abuse , "marteau" est pourtant une variable globale !!

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    Ah je vois que tu as adopté la solution de l'autre fil...

    Pour ton code c'est normal : remplace var image = document.getElementsByTagName("img");...

    par var IMGElems = document.getElementsByTagName("img");...

    C'est probablement ce que tu voulais faire...

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Ah je vois que tu as adopté la solution de l'autre fil...
    Sauf que tu voulais que le blocage ne se fasse que pour certaines images... Mais là ça bloque pour toute les images

    Et justement l'instruction : IMGElems[i].isActive = true; que tu utilises ne sert à rien là...

    On s'attendrait plutôt à un truc comme ça :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function handleClickEvent(event) {
     
         var isThisImageActive = event.target.isActive;
     
         if (isThisImageActive) {
             alert("Oui elle est active ---> " + isThisImageActive);
             event.target.isActive = false;
         } else {
             alert("Non elle n'est pas active ---> " + isThisImageActive);
             event.target.isActive = true ;
         }
    }

  4. #4
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Grand merci Beginner pour tes conseils mais mon problème est de comprendre pourquoi la variable "marteau" (censément globale ?) n'est pas visible dans
    la fonction "handleClickEvent" ?!

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Elle est bel et bien visible, tu peux t'en rendre compte toi même en effectuant la modification que je t'ai indiquée.

    --> Le problème n'est pas là : dans ton code la fonction handleClickEvent() n'est jamais lancée même lorsque tu cliques sur une image... Ce qui est normal puisque (contrairement à ce que tu a l'air de croire) cette fonction n'est pas associée à l’événement onClick des images..

    Et oui cette instruction IMGElems[i].onclick = handleClickEvent; ne fait pas ce tu crois car "IMGElems" n'est pas défini. Et justement en faisant ce que je t'ai indiqué au message 2 il sera défini correctement....

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

Discussions similaires

  1. [PHP 5.3] Probleme de visibilité de variable globale
    Par ygu406 dans le forum Langage
    Réponses: 3
    Dernier message: 23/01/2012, 12h54
  2. Problème de visibilité des variables globales
    Par imaril dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/04/2008, 02h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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