views:

232

answers:

2

I want to show and hide rows of a table based on the value of a select box and this works in Firefox but not IE:

<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  A: 

With table rows in your second for loop you need to set the display property to table-row

Seattle Leonard
+5  A: 

IE doesn't let you access table rows using the document.getElementsByName method. If you use ID's instead of name's it will work. See this page for code that does just what you are looking for: http://www.toolazy.me.uk/template.php?content=getelementsbyname.xml

David
Huh, you learn something new every day, but I think setting the `display` property to `table-row` will also be needed.
Seattle Leonard
@SeattleLeonard `table-row` is not supported by IE - http://www.w3schools.com/css/pr_class_display.asp
Alexander