Parameter of addEventListner

Parameter of addEventListner

本文关键字:addEventListner of Parameter      更新时间:2023-09-26

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

我该如何解决这个问题?

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

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

更新的小提琴