我有这个小提琴:http://jsfiddle.net/yub2B/4/
HTML:
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
JS:
function test(x)
{
alert(x);
}
var text=document.getElementsByTagName("input");
for(var i=0,l=text.length;i<l;i++)
{
text[i].addEventListener("keydown",function()
{
test(i);
},false);
}
而不是为第一个文本框输出0,为第二个文本框输出1 ...它总是输出4。
我该如何解决这个问题?
答案 0 :(得分:4)
在循环中分配事件时,这是臭名昭着的循环问题。您在每次迭代时传递i
的相同值,请使用:
for(var i=0,l=text.length;i<l;i++)
{
(function(i){
text[i].addEventListener("keydown",function()
{
test(i);
},false);
})(i)
}