addEventListener的参数

时间:2012-06-17 17:54:25

标签: javascript addeventlistener

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

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

   })(i)
}

Updated Fiddle