2010-05-18 7 views
3

Je veux montrer et cacher les lignes d'une table en fonction de la valeur d'une boîte de sélection et cela fonctionne dans Firefox, mais pas IE:Impossible basculer l'affichage des lignes de la table dans IE avec getElementsByName()

<select onChange="javascript: toggle(this.value);"> 
<option value="cat0">category 0</option> 
<option value="cat1">category 1</option> 
</select> 

<table> 
<tr name="cat0"> 
    <td>some stuff v</td> 
    <td>some stuff v</td> 
</tr> 
<tr name="cat0"> 
    <td>some stuff d</td> 
    <td>some stuff d</td> 
</tr> 
<tr name="cat1"> 
    <td>some stuff a</td> 
    <td>some stuff a</td> 
</tr> 
<tr name="cat1"> 
    <td>some stuff b</td> 
    <td>some stuff b</td> 
</tr> 
</table> 
<script type="text/javascript"> 
function toggle(category) 
{ 
    // turn everything off 
    for (var i = 0; i < 2; i++) 
    { 
     var cat = document.getElementsByName('cat' + i); 
     for (var j = 0; j < cat.length; j++) 
      cat[j].style.display = 'none'; 
    } 

    // turn on category chosen 
    var cat = document.getElementsByName(category); 
    for (var i = 0; i < cat.length; i++) 
     cat[i].style.display = ''; 
} 
// start by showing cat0 
toggle('cat0'); 
</script> 
+1

Les éléments 'tr' n'ont pas d'attribut de nom. C'est un HTML invalide. –

Répondre

6

IE ne permet pas d'accéder aux lignes de table à l'aide de la méthode document.getElementsByName. Si vous utilisez des ID au lieu du nom, cela fonctionnera. Voyez cette page pour le code qui fait juste ce que vous cherchez: http://www.toolazy.me.uk/template.php?content=getelementsbyname.xml

+0

Huh, vous apprenez quelque chose de nouveau tous les jours, mais je pense que mettre la propriété 'display' à' table-row' sera également nécessaire. –

+0

@SeattleLeonard 'table-row' n'est pas supporté par IE - http://www.w3schools.com/css/pr_class_display.asp – xandercoded

1

Avec les lignes de table de votre deuxième boucle, vous devez définir la propriété d'affichage sur table-row

0

Il ya un bug IE Vous pouvez utiliser! Définissez simplement pour chaque élément le nom et l'identifiant (les deux doivent avoir la même valeur!). Par exemple: <tr name="cat0" id="cat0"> Maintenant, getElementsByName fonctionnera également dans IE.

ps. Je sais que c'est une vieille question, mais j'essayais de résoudre ce problème il y a 5 minutes. Cela peut donc aider quelqu'un: p