[JS] AddeventListener avec paramètres

Résolu
StreM Messages postés 515 Statut Membre -  
 cob -
Salut à tous,

Ayant beaucoup d'éléments qui répondront à des évènements assez peu différents :
<img src="img1.jpg" name="image" onclick="mafonction('valeur1');">
<img src="img2.jpg" name="image" onclick="mafonction('valeur2');">

Je pensais faire un script d'initialisation qui boucle sur toutes les images en question (jusqu'ici, pas de problème), et qui leur affecte l'evenement onclick :
Images = document.getElementsByName('image');
for(var i=0;i<Images.length;i++){  // on parcourt toutes les images
  Images[i].addEventListener('click','mafonction',true);  // on affecte le onclick
}

Mais impossible de passer un paramètre à ma fonction : "uncaught exception : null"
ce qui est d'autant plus frustrant : un "try... catch" ne fonctionnera pas ici je pense !
Quelqu'un aurait-il la solution ou un pti truc pour faire passer un paramètre à ma fonction lors de ma boucle ? Le paramètre serait i.

--

Moins le blanc est intelligent, plus le noir lui parait bête

5 réponses

  1. cob
     
    Salut,

    Tu as testé :
    addEventListener(elt, function(){ foo(bar); }, false);
    Au lieu de :
    addEventListener(elt, foo(bar), false);
    11
  2. TLa Messages postés 57 Statut Membre 12
     
    Salut,

    il y a une solution la dedans : http://thierry.larmoire.free.fr/jeux/demineur/
    voir la fonction Smiley()

    dans ton cas :

    Images = document.getElementsByName('image');
    for(var i=0;i<Images.length;i++){ // on parcourt toutes les images
    Images[i].index=i; // on rajoute un champ index a l'image
    Images[i].onclick=function(e) {
    // le this pour cette methode, est l'image cliquée
    return mafonction(this.index);
    }
    }

    a+
    2
  3. StreM Messages postés 515 Statut Membre 124
     
    Merci, mais j'ai trouvé en fait :
    objet.setAttribute('OnClick', 'mafonction('+variable+')');

    Thierry, il est super sympa ton démineur, mais le bouton droit sous Firefox pose des soucis je pense...
    Va voir ce topic :
    http://www.commentcamarche.net/forum/affich-1906554-%5BJS%5D-Clique-droit-sous-FF
    ;-)
    edit : ah... sous IE aussi ?!?
    2
    1. TLa Messages postés 57 Statut Membre 12
       
      en faite j'ai laissé tomber le traditionnel right-click pour un ctrl-click
      par-ce que j'utilise une extension firefox (allinone gesture*) qui gère d'une façon inhabituel le menu contextuel. Toutes les methodes que j'ai vues sur le net ne marchent pas.

      * c'est une super extension qui permet d'associer des traits tracés à la souris à des actions (history-back history-forw new-tab new-window...)
      https://addons.mozilla.org/extensions/moreinfo.php?id=12
      0
  4. jies
     
    Salut à tous,

    Je reprends cette discussion, car je suis tombé dessus ayant eu besoin de faire l'équivalent d'un addEventListener mais avec paramètres.
    La solution qui consiste à utiliser setAttribute, fonctionne trés bien sous Firefox, mais pas du tout sur IE7...
    Seul moyen faire à l'ancienne méthode.. elt.onclick = function (){ };

    Si vous avez d'autres éléments..

    JS
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. epsy
     
    essaye plutot "'mafonction'" sans les guillemets.

    Si tu veux passer un parametre à ta fonction, c'est impossible, mais...

    Tu peut utiliser le concept objet de DOM/javascript:
    tu donnes à l'objet auquel t'essaye d'attacher l'evenement une paire parametre/valeur,
    puis tu utilise dans ta fonction
    this.[parametre]
    -1