0

我正在尝试检查按钮是否具有名称属性。以下行正确给出了结果。

alert(course_view_buttons[30].hasAttribute("name"));

但是下面的代码给出了这样的错误-

"Uncaught TypeError: Cannot call method 'hasAttribute' of undefined "

完整代码在这里-

var course_view_buttons = document.getElementsByTagName("button");
alert(course_view_buttons.length);

var a=0;
for (x=0;x<=course_view_buttons.length;x++){

    if(course_view_buttons[x].hasAttribute("name");){
    a++;
}
}
alert(a);

如果有人可以,请帮助我。我被困在这 4-5 个小时。提前致谢。

4

2 回答 2

2

问题是less than or equal to在这个表达式中测试:

x <= course_view_buttons.length

当在循环的最后一次迭代中x设置为的值时,引用指向一个不存在的元素。这是因为数组索引从 0 开始,但长度值从 1 开始。course_view_buttons.lengthcourse_view_buttons[x]

解决方案是删除等号:

x < course_view_buttons.length
于 2013-09-13T20:44:53.310 回答
1

您的 for 循环条件,将其更改为

for (x=0;x < course_view_buttons.length;x++){

           ^_________ There is no <= which will give undefined as you are out of array bounds.

数组索引以 0..length-1 开头

因此,在您的最后一次数组迭代中,它尝试访问

course_view_buttons[30].hasAttribute("name")什么时候course_view_buttons[30]不存在

于 2013-09-13T20:44:31.733 回答