尝试隐藏表行时出现JavaScript错误

时间:2009-09-16 23:04:22

标签: javascript css xhtml

我正在尝试根据用户的选择显示行。假设他只想要3行,那么第四行和第五行将隐藏。请在下面找到html和javascript的部分。

HTML

<table>
  <tr id="sRow1">
    <td>1a</td>
    <td>1b</td>
  </tr>
  <tr id="sRow2">
    <td>2a</td>
    <td>2b</td>
  </tr>
  <tr id="sRow3">
    <td>3a</td>
    <td>3b</td>
  </tr>
  <tr id="sRow4">
    <td>4a</td>
    <td>4b</td>
  </tr>
  <tr id="sRow5">
    <td>5a</td>
    <td>5b</td>
  </tr>
</table>

的JavaScript

// b gets value from xml file        
    while (b <= 5)
    {
        var rowName = "sRow" + b;
        alert(rowName);
        try {
            document.getElementById(rowName).style.display = "none";
        }
        catch (err)
        {
            alert(err.description)
        }
        b++;
    }

我在document.getElementById(rowName).style.display =“none”;收到了Object required错误。你能帮忙吗?

3 个答案:

答案 0 :(得分:1)

你错过了有趣的一点(b来自哪里),所以我只想猜测:有时 b实际上并不是1之间的数字和5。也许它是一个字符串,不能完全格式化为一位数的数字1-5,或者它可能是完全不同的东西......让我们让你的代码更安全一些,以防万一我是对的:

// b gets value from xml file

// ensure b is a number - will fail comparison if NaN
b = new Number(b);
while (b <= 5)
{
  var rowName = "sRow" + b;
  var row = document.getElementById(rowName);
  if ( row ) // verify element was found before trying to modify it!
    row.style.display = "none";
  b++;
}

请注意,我已删除了try {} catch - 您最好只测试getElementById()的返回值,因为如果您希望稍后使用调试器,那么这不会影响调试...

答案 1 :(得分:1)

根据我的经验,你会在不同的浏览器中得到不一致的结果,试图通过修改样式属性来使表行不可见。更安全的做法是使用表对象上的insertRow()deleteRow() dom方法从表中实际删除和插入行。这可以在您可能遇到的所有主要浏览器中得到适当支持。

答案 2 :(得分:0)

我认为你缺少带有行id的runat属性,因为你已经提到了行的id但没有提到runat属性,如果你没有提到runat属性那么那个错误就来了。