Page 1 sur 1

getelementbyid dans une boucle

Posté : 30 mars 2008, 20:40
par Invité
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?

Posté : 30 mars 2008, 20:47
par Berzemus
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..

Posté : 30 mars 2008, 20:56
par Invité
ben justement, un alert m'affiche bien les éléments du array.
Je pensais que c'était un pb de syntaxe...

Posté : 31 mars 2008, 09:31
par Berzemus
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.

Posté : 31 mars 2008, 11:32
par Cyrano
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";
    }
}

Posté : 31 mars 2008, 16:54
par Ryle
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"; 
}