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を出力し、2番目のテキストボックスに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 に答える