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
嗯,这个能解决,不过我想知道到底怎么回事
#4
如果我没猜错你的i应该是全局变量
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides");
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides");
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?
#5
楼主如果使用js的闭包不出现该问题。
要每次换回i的值,
按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。
要每次换回i的值,
按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。
#6
楼上好悲催啊
#7
#8
5楼值得鼓励!
#1
仔细检查了一下,第二个也不正常,所有id都变成最后一个button的id,不是各自的id
#2
换成this.id 试试。。
#3
嗯,这个能解决,不过我想知道到底怎么回事
#4
如果我没猜错你的i应该是全局变量
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides");
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?
在循环完成之后i会变成length-1,也就是最后一个button的索引号(假设是3)
然后又因为你是在点击之后才调用i的,所以你每次点击的时候调用的是:
addItem(buttons[ 3].id, "sides");
你不会以为每次循环都会把对应的i给到括号里面,让buttons[i]变成buttons[1],buttons[2]这样子吧?
#5
楼主如果使用js的闭包不出现该问题。
要每次换回i的值,
按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。
要每次换回i的值,
按照楼主的写法,最后调用的实际上只有最有一个button绑定了onclick
擦2011年的贴。。。
#6
楼上好悲催啊
#7
#8
5楼值得鼓励!