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

shiilyi 2011-12-20 03:01:56
我在编程时产生如下错误:
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"); };//正常
}

这个是什么原理,没弄明白
...全文
67113 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡蓝海域 2014-08-26
  • 打赏
  • 举报
回复
5楼值得鼓励!
12131312 2014-04-29
  • 打赏
  • 举报
回复
楼上好悲催啊
yuyeyi 2014-04-28
  • 打赏
  • 举报
回复
楼主如果使用js的闭包不出现该问题。 要每次换回i的值, 按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick 擦2011年的贴。。。
zjleon2008 2011-12-20
  • 打赏
  • 举报
回复
如果我没猜错你的i应该是全局变量
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[3].id, "sides");
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?
shiilyi 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zsx841021 的回复:]

换成this.id 试试。。
[/Quote]

嗯,这个能解决,不过我想知道到底怎么回事
三石-gary 2011-12-20
  • 打赏
  • 举报
回复
换成this.id 试试。。
shiilyi 2011-12-20
  • 打赏
  • 举报
回复
仔细检查了一下,第二个也不正常,所有id都变成最后一个button的id,不是各自的id

87,918

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧