11550 sujets

JavaScript, DOM et API Web HTML5

Exemple tout bête :
var champs = document.getElementsByTagName('p');
champs.onclick = function() { alert('chevreuil'); }

ne marche pas.

Suis-je obligé de parcourir mon tableau champs pour assigner un évenement à chaque fois qu'on clique sur un <p> ?

2ème question (de noob) :
Je me résigne à
var champs = document.getElementsByTagName('p');

function afficheI(i) { alert(i); }

for (i=0; i<champs.length; i++)
{
   champs[i].onclick = afficheI;
}
[/i]
Il me semble que la syntaxe est de ne pas mettre de () après afficheI, mais comment je passe mon i en paramètre ?
Modifié par nien (28 Aug 2009 - 16:58)
Bonjour à toi aussi , ( Smiley langue roh le reloud)

1/ oui tu dois parcourir tous le tableau.

2/non il faut les paranthèses :

for (i=0; i<champs.length; i++) 
{ 
   champs.onclick = afficheI(i); 
} 
Je te conseil de tester ton code masseuro&#8230;

Pour passer un paramètre c'est "simple" :
var champs = document.getElementsByTagName('p'); 
 
function afficheI(i) { alert(i); } 
 
for (i=0; i<champs.length; i++) 
{ 
   champs.onclick = (function (index) {
      return function () {afficheI(index);};
   })(i);
} 


ou un peu plus lisible :
var champs = document.getElementsByTagName('p'); 
 
function afficheI(i) { return function () {alert(i); }; } 
 
for (i=0; i<champs.length; i++) 
{ 
   champs.onclick = afficheI(i);
} 


Et il y a même une solution alternative,

// utiliser addEventListener et co.
document.body.onclick = function (e) {
   e = e || window.event;
   if (e.target.nodeName === "P") {
      alert("un truc");
   }
};