1

我已经完成了一个功能,但我不明白为什么,它的一部分不起作用。

实际上,我使用使用 className 和 Id 的方法。

这是代码的一部分:

 var items = new Array();
 var itemCount = document.getElementsByClassName("items");

 for(var i = 0; i < itemCount.length; i++)
 {
     items[i] = document.getElementById("p"+(i+1)).value;
 }

 return items;
 }

而在 jsfiddle 中显示该 Id 存在的 html 部分。

所以它不应该返回给我这个错误:

未捕获的类型错误:无法读取 null fiddle.jshell.net:402 的属性“值”

相关行如下:

items[i] = document.getElementById("p"+(i+1)).value;

4

3 回答 3

2

代表着:

document.getElementById("p"+(i+1))

null在一些循环迭代中返回。换句话说,该元素不存在。然后您尝试从中检索.value属性null,这会引发异常。

更新

如果我正确阅读了代码,p7则丢失了。您可以像这样检查:

var elem = document.getElementById("p"+(i+1));
if ( !elem ) {
    alert('p'+(i+1)+' is missing!');
}
于 2012-10-05T09:21:25.660 回答
1

这发生在最后一个元素 i+1 上。所以改变它。

for(var i = 0; i < itemCount.length; i++)
{
alert("i"+i+" "+document.getElementById("p" + (i+1)).value);
 items[i] = document.getElementById("p" + (i+1)).value;
 }

这一直运行到第 5 个元素,即 p6。如图所示,服务器代码本身缺少 p7。

于 2012-10-05T09:23:31.813 回答
1

在您的小提琴中,您有 td 元素,其 id p7 缺失和 p8 两次。这仅在您的小提琴示例中还是在您的实际代码中?如果它也在您的代码中,那么就是您的问题。您必须将其中一个 id 更正为 p7。

于 2012-10-05T09:26:33.403 回答