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 :

Appel d'une fonction par un évenement


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 112
    Points : 89
    Points
    89
    Par défaut Appel d'une fonction par un évenement
    bonjour
    J'aimerais appeler une fonction avec un argument spécifique pour chaque evenement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for (var no=0; no <=2; no++)
    {
      presentation.getElementsByTagName("img")[no].onmouseover = on(no);
    // ceci ne marche pas car je ne peux pas faire d'appel a une fonction , mais seulement référence!
    }
    
    function on(ref)
    {
       presentation.getElementsByTagName("img")[ref].setAttribute("id", "transparent");
         presentation.getElementsByTagName("p")[ref+1].setAttribute("id", "evidence");
    }
    Un conseil?

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Oui, tu peux faire référence à une fonction au lieu de l'exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (var no=0; no <=2; no++) {
      presentation.getElementsByTagName("img")[no] = function() {
        this.setAttribute("id", "transparent");
        presentation.getElementsByTagName("p")[no+1].setAttribute("id", "evidence");
      };
    }
    Si ça ne fonctionne toujours pas, tu peux ajouter la valeur de ref à ton élément HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (var no=0; no <=2; no++) {
      var image = presentation.getElementsByTagName("img")[no];
      image.onmouseover.ref = no;
      image.onmouseover = function() {
        var ref = this.ref;
        this.setAttribute("id", "transparent");
        presentation.getElementsByTagName("p")[ref+1].setAttribute("id", "evidence");
      };
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    J'avoue ne pas trop bien comprendre la premiere. Ca ne serait pas plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (var no=0; no <=2; no++) {
      presentation.getElementsByTagName("img")[no].onmouseover = function() {
        this.setAttribute("id", "transparent");
        presentation.getElementsByTagName("p")[no+1].setAttribute("id", "evidence");
      };
    }
    Quand a la deuxieme ca ne marche pas . je continue toujours a chercher pourquoi.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 956
    Points : 44 116
    Points
    44 116
    Par défaut
    Bonjour,
    plusieurs remarques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    presentation.getElementsByTagName("img")
    est a mettre en dehors de la boucle, inutile de récupérer à chaque fois la même chose

    Pourquoi changer l'ID sur un événement mouseover ou mouseout, il est préférable de jouer avec la className

    Pour la récupération du P[ref+1] il est préférable de la faire à l'initialisation de la fonction plutôt que de le faire sur chaque mouseover.

    Pour la deuxième proposition de loceka, il y a un onmouseover de trop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (var no=0; no <=2; no++) {
      var image = presentation.getElementsByTagName("img")[no];
    //  image.onmouseover.ref = no; //-> ERREUR ICI
      image.ref = no;
      image.onmouseover = function() {
        var ref = this.ref;
        this.setAttribute("id", "transparent");
        presentation.getElementsByTagName("p")[ref+1].setAttribute("id", "evidence");
      };
    }
    en gros cela peut donner cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var oImg, tImg  = presentation.getElementsByTagName("IMG");
    var tPara = presentation.getElementsByTagName("P");
    var i, nbImg = tImg.length;
    for( i=0; i < nbImg; i++){
      oImg  = tImg[i];
      // stocke le P 
      oImg.ref = tPara[i +1];
      oImg.onmouseover = function(){
        // j'ai un doute sur l'utlisation de l'ID
        this.setAttribute("id", "transparent");
        this.ref.setAttribute("id", "evidence");
      };
    }
    mais j'ai un doute sur la finalité...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    Un grand merci pour ta réponse élégante NoSmoking.
    Pour shematisez grossierement, l'objectif est de surligner une image et son texte associé a l'autre bout de l'ecran quand la sourie glisse sur l'un des élément (et le faire disparaitre quand la sourie sort).
    Voici le code final (les animations etant géré par css3) :
    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
    34
    {
    var presentation = document.getElementById("presentation");
    var oImg, tImg  = presentation.getElementsByTagName("IMG");
    var oPara, tPara = presentation.getElementsByTagName("P");
    var i, p;
    for( i=0; i <= 2; i++){
     
      oImg  = tImg[i];
      oImg.ref = tPara[i +1];
      oImg.onmouseover = function(){
        this.setAttribute("id", "transparent");
        this.ref.setAttribute("id", "evidence");
      };
     
      oImg.onmouseout = function(){
        this.removeAttribute("id");
        this.ref.removeAttribute("id");
      }
     
      p = i+1;
      oPara  = tPara[p];
      oPara.ref = tImg[i];
      oPara.onmouseover = function(){
        this.setAttribute("id", "evidence");
        this.ref.setAttribute("id", "transparent");
      };
     
      oPara.onmouseout = function(){
        this.removeAttribute("id");
        this.ref.removeAttribute("id");
      }
    }
     
    }

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Pour la deuxième proposition de loceka, il y a un onmouseover de trop
    Un de trop dans le 2ième code, un qui manque dans le premier, au total ça s'équilibre.

    Désolé, j'ai posté ça juste avant de partir vendredi soir et j'ai pas pris le temps de me relire.

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

Discussions similaires

  1. Appel d'une fonction par une string depuis un plugin
    Par cahnory dans le forum jQuery
    Réponses: 1
    Dernier message: 04/06/2010, 21h11
  2. Appel d'une fonction par une autre
    Par maparè dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2010, 15h57
  3. Appel d'une fonctions par plusieurs Form
    Par developppez dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/12/2008, 01h56
  4. appel d'une fonction par variable
    Par jgarin dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/01/2008, 12h56
  5. Appel d'une fonction en C par un noyau en asm (link)
    Par julson dans le forum Programmation d'OS
    Réponses: 7
    Dernier message: 22/03/2005, 15h14

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