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 :

Variable dans fonctions à création dynamique.


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Variable dans fonctions à création dynamique.
    Bonjours,

    Je voudrai savoir si vous connaissiez un moyen pour que la fonction placé dans le tabDiv[i].onmouseover :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabDiv[i].onmouseover = function(){mouseOver(i);};
    devienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function(){mouseOver(1);};
    (ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function(){mouseOver(2);};
    ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function(){mouseOver(2);};
    etc.) et fonction de i

    ?

  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
    Je pense que ton problème vient du fait que la variable i est déréférencée au moment de l'évènement mouseover. Du coup l'englober dans une fonction anonyme devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabDiv[i].onmouseover = (function(_i){ return function(){mouseOver(_i);}; })(i);

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci effectivement ça marche tu pourrais expliciter en détail le problème ou me renvoyer vers une page qui pourrait m'expliquer le problème ? Pour comprendre le fond du problème ^^' j'ai vachement du mal ac JS :'(

  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
    C'est sans doute la partie la plus complexe de Javascript, les scopes et closures.

    Voilà quelques liens :
    Usage avancé des fonctions JavaScript
    http://www.coursweb.ch/javascript/closure.html
    https://developer.mozilla.org/fr/doc..._en_JavaScript

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Peut-être plus compréhensible:

    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
    27
    28
    29
    30
    31
    32
    33
    <html>
      <head>
        <script type="text/javascript">
          function initialize(){
            var tabDiv = document.getElementsByTagName("div");
     
            // la closure
            function mouseOver(index){
                return function(e){
                    console.log("i = " + index + ", id = " + this.id); // id du div
                    console.log("event = " + e); // l'objet event
     
                    // faire quelque chose ...
                }
            }
     
            for(var i = 0; i < tabDiv.length; i++){
              tabDiv[i].onmouseover = mouseOver(i);
            }
          }
     
     
        </script>
      </head>
      <body onload="initialize()">
        <div id="a">a</div>
        <div id="b">b</div>
        <div id="c">c</div>
        <div id="d">d</div>
        <div id="e">e</div>
      </body>
     
    </html>
    edit:
    J'ai rajouté l'évènement retourné par onmouseover (paramètre e de la fonction plus qu'anonyme). Plus sympa pour faire des choses

    A+
    Dernière modification par Invité ; 24/06/2013 à 14h58.

  6. #6
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Ou, ayant le même effet, utiliser .bind d'ECMAScript 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabDiv[i].onmouseover = function(_i){ return _i;}.bind(null, i);


    Tu as donc le choix entre :
    - la solution de Sylvain, on appelle ça une IIFE (Immediately Invoked Function Expression)
    - celle de jlmag, on appelle ça une closure
    - la mienne, utiliser le bind (Attention à la compatibilité des navigateurs)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Bonjour,

    peut-être que ceci peut t'aider :
    http://www.developpez.net/forums/d66...es-this-event/

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Wow ^^ merci à vous

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

Discussions similaires

  1. Variable dans fonction Dcount
    Par chelmi95 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/04/2008, 16h37
  2. Utilisation variable dans fonction
    Par Jiraiya42 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2008, 17h22
  3. Réponses: 5
    Dernier message: 09/11/2007, 07h32
  4. passage de variable dans fonction
    Par nicerico dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/12/2006, 23h25
  5. variable dans fonction
    Par pierre371 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 14h24

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