[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. 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
      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