changer onclick dans une boucle for

changer onclick dans une boucle for - HTML/CSS - Programmation

Marsh Posté le 19-07-2013 à 15:59:42    

Bonjour,
 
après quelques heures de recherche je ne trouve toujours pas la solution à mon problème apparemment simple:
 
Je dois modifier la propriété onclick() de plusieurs éléments en récupérant leur id a l'aide d'une boule for.
 

Code :
  1. //code test
  2. function changerOnclick() {
  3.  
  4.   for (i=0;i<10;i++)  {
  5.     var block=document.getElementById('id'+i);
  6.     block.onclick = function() {alert(i);};
  7.  
  8.   }
  9. }


 
Hélas lorsque je clique sur n'importe quel élément c'est toujours 10 la dernière valeur i affichée..
 
Ceci dans le but de pouvoir faire quelque chose comme:
 

Code :
  1. function changerOnclick() {
  2.  
  3.   for (i=0;i<10;i++)  {
  4.     var block=document.getElementById('id'+i);
  5.     block.onclick() = function () { changerBackground(block, 'green'); };
  6.  
  7.   }
  8. }


 
Idem quand je clique sur n'importe quelle balise c'est toujours la dernière n°10 qui est verte  :heink:  j'avoue que je ne comprend plus rien
 
Si quelqu'un a une piste il sera bienvenu , merci

Reply

Marsh Posté le 19-07-2013 à 15:59:42   

Reply

Marsh Posté le 19-07-2013 à 17:25:22    

Essaye de remplacer block par this dans changerBackground, mais je ne suis pas sur que l’élément soit passé quand on fait des DOM.onclick(), je pense qu'il faut sans doute repasser par l'event pour avoir accès a l’élément...
 
A mon avis tu devrais passer par une bibliothèque (Mootools ou jquery par exemple), tu te simplifierais la vie...


---------------
D3
Reply

Marsh Posté le 19-07-2013 à 17:49:27    

Salut, ton erreur viens car le JS va être exécuté entierement avant que tu ne click sur un bouton.
 
Ta valuer i vaut 10 partout, si tu utilise firbug(par exemple) tu peux vérifier ça en cliquant sur l'onglet "Events" puis regarde dans "click".
 
Pour une solution simple et rapide, connais-tu jQuery? L'utilises-tu?
 
Edit : Désolé mechkurt, je n'avais pas vu ton message


Message édité par sltpaulo le 19-07-2013 à 17:50:23
Reply

Marsh Posté le 22-07-2013 à 14:42:43    

J'ai essayé en remplaçant block par this et ça marche nickel..
Je suppose que ce problème devrait apparaitre avec l'emploi de toute fonction dans une boucle-
 
Sinon je découvre jquery depuis quelques mois et c'est vrai que je ne pense pas toujours à l'utiliser..  
Merci pour votre aide :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed