未捕获的TypeError:无法调用未定义的方法'hasAttribute'

时间:2013-09-13 20:43:33

标签: javascript

我正在尝试检查按钮是否具有name属性。以下行正确显示结果。

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个小时。提前谢谢。

2 个答案:

答案 0 :(得分:2)

问题是在此表达式中测试less than or equal to

x <= course_view_buttons.length

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

解决方法是删除等号:

x < course_view_buttons.length

答案 1 :(得分: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]