js问题,浏览器报错Cannot read property 'id' of undefined

时间:2021-11-18 09:47:25
我在编程时产生如下错误:
var buttons = main.getElementsByTagName("input");
    for (i = 0; i < buttons.length; i++) {
        buttons[i].onclick = function () { addItem(buttons[i].id, "sides"); }; //报错rt
    }



var buttons = main.getElementsByTagName("input");
    for (i = 0; i < buttons.length; i++) {
        var id = buttons[i].id;
        buttons[i].onclick = function () { addItem(id, "sides"); }; //正常
    }

这个是什么原理,没弄明白

8 个解决方案

#1


仔细检查了一下,第二个也不正常,所有id都变成最后一个button的id,不是各自的id

#2


换成this.id 试试。。

#3


引用 2 楼 zsx841021 的回复:
换成this.id 试试。。


嗯,这个能解决,不过我想知道到底怎么回事

#4


如果我没猜错你的i应该是全局变量
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides"); 
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?

#5


楼主如果使用js的闭包不出现该问题。
要每次换回i的值,

按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。

#6


楼上好悲催啊

#7


该回复于2014-08-19 14:14:21被管理员删除

#8


5楼值得鼓励! js问题,浏览器报错Cannot read property 'id' of undefined

#1


仔细检查了一下,第二个也不正常,所有id都变成最后一个button的id,不是各自的id

#2


换成this.id 试试。。

#3


引用 2 楼 zsx841021 的回复:
换成this.id 试试。。


嗯,这个能解决,不过我想知道到底怎么回事

#4


如果我没猜错你的i应该是全局变量
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides"); 
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?

#5


楼主如果使用js的闭包不出现该问题。
要每次换回i的值,

按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。

#6


楼上好悲催啊

#7


该回复于2014-08-19 14:14:21被管理员删除

#8


5楼值得鼓励! js问题,浏览器报错Cannot read property 'id' of undefined