getelementbyid dans une boucle

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2008, 20:40

Bonjour à tous,

j'essaye d'appliquer un traitement en boucle avec getElementById, comme ceci:
  tabLiens = new Array('champ1', 'champ2', 'champ3', 'champ4');  //id d'éléments html
  for (i=0; i < tabLiens.length; i++)
  {     
       document.getElementById(tabLiens[i]).style.display = "none";
  }
Le but est de masquer tous les éléments html dont l'id se trouve dans mon array tabLiens.
L'erreur que je reçois:
document.getElementById(tabLiens) has no properties


Voyez-vous ce qui ne va pas?

ViPHP
ViPHP | 4039 Messages

30 mars 2008, 20:47

Oui. L'élément sélectionné n'a pas d'attributs. Fait un alert sur tabLiens pour savoir lequel cause du souci.. d'un autre côté, si l'élément n'a pas, auparavant, l'attribut style défini, ça pourrait causer ce genre de souci aussi..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2008, 20:56

ben justement, un alert m'affiche bien les éléments du array.
Je pensais que c'était un pb de syntaxe...

ViPHP
ViPHP | 4039 Messages

31 mars 2008, 09:31

a moins que je sois complètement à coté de la plaque, je n'en vois pas de particulier..

Essaye de vérifier l'existence de l'attribut avant de le modifier:

Code : Tout sélectionner

for (var i=0; i < tabLiens.length; i++) { if ( document.getElementById(tabLiens[i]).style.display)) document.getElementById(tabLiens[i]).style.display = "none"; }
(si ça cause toujours des soucis, essaye d'enlever le display dans le if.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 19672 Messages

31 mars 2008, 11:32

Tss tss... un peu de logique : c'est l'objet qui n'est pas trouvé, pas sa propriété style. Donc vérifie si l'objet est bien défini et au passage, on ne mesure pas la longueur d'un tableau à chaque tour de boucle, on le mesure avant et on utilise une variable à la place :
var n = tabLiens.length;
for (var i=0; i < n; i++)
{
    if (undefined !==  document.getElementById(tabLiens[i]))
    {
        document.getElementById(tabLiens[i]).style.display = "none";
    }
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 mars 2008, 16:54

Pour tester l'existence d'un champ, on peut également l'appeller directement, celui-ci retournant une valeur null/undefined/false s'il n'existe pas et [object]/true s'il existe bien :
for (var i=0; i < n; i++) { 
    if (document.getElementById(tabLiens[i])) 
        document.getElementById(tabLiens[i]).style.display = "none"; 
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...