0

我有这个小提琴: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。

我怎样才能解决这个问题?

4

1 回答 1

4

在循环内分配事件时,这是臭名昭著的循环问题。您i在每次迭代中传递相同的值,使用这个:

for(var i=0,l=text.length;i<l;i++)
{
   (function(i){
      text[i].addEventListener("keydown",function()
      {
         test(i);
      },false);

   })(i)
}

更新小提琴

于 2012-06-17T17:59:20.493 回答