[JS] AddeventListener avec paramètres

Résolu
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. Salut,

    Tu as testé :
    addEventListener(elt, function(){ foo(bar); }, false);
    Au lieu de :
    addEventListener(elt, foo(bar), false);
    11
    1. 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
      1. 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. 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
      2. 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
        1. 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