[Résolu] Pb classe javascript

Pb classe javascript [Résolu] - HTML/CSS - Programmation

Marsh Posté le 17-04-2008 à 22:51:35    

Bonjour,
 
je me permets de solliciter votre aide car je sèche bêtement sur un bout de code javascript tout con depuis un bon moment.
 
Je m'explique.
 
Je souhaite au moment d'un clic sur un élément, modifier la classe de cet élément ainsi que celle d'autres éléments de la page.
 
J'ai donc un code html qui ressemble à ça :
 

Code :
  1. <ul>
  2. <li class="left"><a class="off" href="#;" onclick="changeEtat(); this.className='on';">bla</a></li>
  3. <li class="mid"><a class="on" href="#;" onclick="changeEtat(); this.className='on';">bla</a></li>
  4. <li class="right"><a class="on" href="#;" onclick="changeEtat(); this.className='on';">bla</a></li>
  5. </ul>


 
avec comme fonction javascript :
 

Code :
  1. function changeEtat() {
  2. var a = document.getElementsByTagName('a');
  3. for (var i=0; a.length; i++) {
  4.  if(a[i].className == 'on') {
  5.   a[i].className = 'off';
  6.  }
  7. }
  8. }


 
Donc ma fonction va chercher tous les éléments de classe 'on' et les passe en 'off'.
Sauf que firebug me renvoit l'erreur suivante :
 

Code :
  1. a[i] has no properties
  2. [Break on this error] if(a[i].className == 'on') {


 
Cela a pour conséquence de bien mettre mes autres éléments en classe 'off' mais je pense qu'il y a un pb avant la fin de ma boucle et que du coup mon action this.className='on' n'arrive jamais.
 
Voilà, je bloque là-dessus donc si quelqu'un pouvait m'indiquer comment débugger mon code, je lui en serai très reconnaissant.
 
Merci :)
 
P.S. : au passage, comment puis-je inclure mon this.className='on' dans ma fonction ?


Message édité par manuura le 18-04-2008 à 00:11:20
Reply

Marsh Posté le 17-04-2008 à 22:51:35   

Reply

Marsh Posté le 17-04-2008 à 23:00:33    

Pour parcourir les éléments d'un tableau, on peut soit :
 

Code :
  1. for (var i in a)

Ou :

Code :
  1. for (var i = 0; a[i]; i ++)

Ou encore :

Code :
  1. for (var i = 0; i < a.length; i ++)


 
Avec ça, tu va recevoir une référence nulle à un moment ou un autre :

Code :
  1. for (var i=0; a.length; i++)


Message édité par tpierron le 17-04-2008 à 23:05:42
Reply

Marsh Posté le 17-04-2008 à 23:09:04    

Ah ben oui forcément ça marche mieux quand on sait écrire correctement une boucle.  :pt1cable:  
Merci beaucoup pour les détails  :)  
Une idée pour le this.className='on' dans la fonction ?

Reply

Sujets relatifs:

Leave a Replay

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