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

jQuery Discussion :

Portée de variable globale


Sujet :

jQuery

  1. #1
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    499
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 499
    Points : 190
    Points
    190
    Par défaut Portée de variable globale
    Bonjour,

    je cherche a utilisé une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var $menu_load = $("#primary-navigation");
    console.log($menu_load);
    // renvoie l'objet
    $("input").keyup(function() {
         console.log($menu_load) );
         // renvoie null
    });
    Pourquoi le deuxieme console.log me renvoie une variable null, alors qu'elle est global ?

    Et comment faire pour utiliser une seule variable dans ce cas de figure ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Il y a un guillemet en trop, la coloration syntaxique te le met en évidence. Aussi, il manque l'accolade fermante de la fonction.

  3. #3
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    499
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 499
    Points : 190
    Points
    190
    Par défaut
    oui je sais, c'est juste un exemple.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Et bien si ton exemple est faux, il y a fort à parier que ton vrai code le soit lui aussi

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Remarque au passage, pas besoin de "$" en javascript pour déclarer des noms de variable.

  6. #6
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    499
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 499
    Points : 190
    Points
    190
    Par défaut
    code modifier

    Pour ce qui est du dollar cela juste permet d'y voir clair.

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    En fait c'est tout ton keyup qui ne marche pas (si tu mets alert('a') à l'intérieur ça ne fonctionnera pas non plus), ce n'est pas un problème de variable globale ou non. Ton DOM n'a pas fini d'être chargé, ton input n'existe aps au moment où le handler est chargé, et ne peut donc s'appliquer sur cet élément.

    Pour que cela fonctionne, deux méthodes :

    - Mettre ton code à la fin de ta page, juste avant de la fermeture body (le navigateur interprétant la page de bas en haut, ton DOM sera ainsi interprété avant le js)
    - Encapsuler ton code avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(function() {
              // ....
    }
    qui signifie "une fois que le DOM est chargé"

  8. #8
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    499
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 499
    Points : 190
    Points
    190
    Par défaut
    En faite le probleme de scope ces jquery qui n'accepte pas un objet, mais pourtant une String est un objet et cela fonctionne avec un une String ?
    Un exemple avec trois variables locales :
    http://jsfiddle.net/fxCE9/

    Sa me semble une mauvaise idee d'utiliser une global.

  9. #9
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Non, ma remarque tiens toujours pour ton exemple précédent, cela ne marche pas car ton DOM n'est pas chargé. L'exemple que tu cites à présent est du javacript pur, pas de manipulation de DOM, ma remarque ne s'applique pas dans ce cas là.

  10. #10
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    499
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 499
    Points : 190
    Points
    190
    Par défaut
    ok, merci, mais j'utilise jquery et effectivement mon code est dans
    $(function () {...

    });

    Mon code fonctionne bien, le probleme c'est que je veux une variable dans lequel je met un objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $menu_load = $("#primary-navigation");
    Et je veux l'utiliser dans des evenements, comme click, keyup, etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      $(".toggle").on("click", function(){
          alert($menu_load); // renvoie null
          $(this).toggleClass("expanded");
          content.slideToggle();
      });
    Ce me renvoie systematiquement null !

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Tu sais que tu aurais plus vite fait de nous montrer tel quel le code que tu as écris, ça irait pas mal plus vite.

    Par exemple, un code comme celui-ci chez moi fonctionne parfaitement bien (en tout cas logiquement bien...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>
        $(function() {
            var $menu_load = $("#primary-navigation");
            console.log($menu_load);
     
            $('input').keyup(function() {
                console.log($menu_load);
            });
        });
    </script>
     
    <form><input type='text'></form>

Discussions similaires

  1. la portée des variables globales en XSLT
    Par onh890 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 01/06/2012, 18h57
  2. Portée variable - variable globale
    Par Nicolas123 dans le forum GLUT
    Réponses: 2
    Dernier message: 11/05/2009, 17h42
  3. Problème de portée de variable globale
    Par draudrau dans le forum C
    Réponses: 16
    Dernier message: 06/11/2007, 10h27
  4. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 17h49
  5. Portée d'une variable globale
    Par Giill dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/12/2005, 11h13

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