一个奇怪的问题,在线求解答
小弟在做一个东西时,突然遇到这样一件事
代码大概意思如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>22</title>
</head>
<body>
<input type="button" id="b1" name="btn1" value="btn1" />
<input type="button" id="b2" name="btn1" value="btn2" />
<input type="button" id="b3" name="btn1" value="btn3" />
<script>
var tmp=document.getElementsByTagName("input");
for(var i=0; i < tmp.length; i ++){
tmp[i].onclick=function() {
window.alert(i);
}
}
</script>
</body>
</html>
原以为这样绑定事件点击3个不同的按钮会弹出0,1,2, 结果点击3个按钮都只弹出了3,orz。
但把代码换成如下
<script>
var tmp=document.getElementsByTagName("input");
for(var i=0; i < tmp.length; i ++){
test(tmp[i], i);
}
function test(obj, num) {
obj.onclick=function() {
window.alert(num);
}
}
</script>
又能正常弹出0,1,2。
有点搞不懂了,按照正常想法来说,第一种写法固然省点代码,但结果却不对,而且居然弹出的是3,再次orz,第二种倒是正确,但代码给人的感觉好像多此一举,
求高人解答,为什么第一种写法会产生那样的结果。