试图隐藏表行时发生JavaScript错误

试图隐藏表行时发生JavaScript错误,javascript,css,xhtml,Javascript,Css,Xhtml,我试图根据用户的选择显示行。假设他只想要3行,那么第四行和第五行将隐藏。请在下面找到html和javascript部分 HTML 1a 1b 2a 2b 3a 3b 4a 4b 5a 5b JavaScript // b gets value from xml file while (b <= 5) { var rowName = "sRow" + b; alert(rowName); try {

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

HTML


1a
1b
2a
2b
3a
3b
4a
4b
5a
5b
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++;
    }
//b从xml文件中获取值

而(b你错过了有趣的部分(b
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++;
}
//b从xml文件中获取值
//确保b是一个数字-如果为NaN,则比较将失败
b=新编号(b);

虽然(b根据我的经验,如果试图通过修改样式属性使表行不可见,那么在不同的浏览器中会得到不一致的结果。更安全的做法是在表对象上使用和dom方法从表中删除和插入行。这在您可能会遇到的所有主要浏览器中都得到了适当的支持unter.

我认为您缺少行id的runat属性,因为您提到了行的id,但没有提到runat属性,如果您没有提到runat属性,则会出现错误。

我不明白您为什么需要在此处尝试catch。您确定
document.getElementById(rowName)
实际找到元素?如果没有,它应该返回
null
,进一步的属性访问-即
.style.display
-应该会导致错误。为了防止出现这种情况,只需在尝试设置其样式之前检查元素是否存在。对我来说是有效的,例如
b=4
。可能
b
不是您所期望的?我想的是什么您在错误发生前收到的行名是什么?另一个奇怪的观察结果是,如果我将id名称从sRow更改为sib,它会起作用。sRow是某种类型的关键字吗。RegardsNo,但“sRow”可能在页面的其他地方有其他用途?您发布的内容是正确的,因此错误一定在其他地方。URL?谢谢。alerts(行名)显示正确的id。因此b的值不是问题所在。Regards@kobra:你确定吗?众所周知,在
alert()
对话框中显示的字符串末尾很难看到空格…@Vagabond-将声明放入try{}解决了这个问题,这使它成为一个范围问题。@karim79:它不是范围。JavaScript中的范围不是这样工作的。请参阅我对您答案的评论…感谢您提醒我。我尝试了警报(rowName+“gs”)检查你的观点。仍然得到正确的警报。RegardsThanks。你能指出一些例子吗?我觉得这种方式很有趣。问候。当然。在我的答案中的方法名称链接中有代码示例。请参见上文。:)谢谢。很抱歉忽略了。关于在一行上设置“display:none”应该不会有任何问题;我在任何浏览器上都没有遇到过任何困难。但是,将其设置回“display:table row”并不是那么容易,因为IE中有一个bug,它需要“display:block”来代替。我通常发现添加/删除“hidden”是最容易的类,然后从CSS中选择“.hidden{display:none;}”。这是一个带有javascript的简单html网页。因此不会出现运行服务器或客户端的问题。注意
// 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++;
}