0

クロージャーが必要な次のコードがあります。

var numItems = document.getElementsByClassName('l').length;
for (var i = 0; i < numItems; i++) {
  document.getElementsByClassName('l')[i].onclick = function (e){
    preview(this.href, i);
  };
}

何が起こるかというと、アイテムがクリックされるたびに、i に対して常に同じ番号をプレビューするということです

私がしなければならないことは

function indexClosure(i) {
  return function(e) {
    preview(this.href, i);
  }
}

そして、onclick を次のように割り当てます。

document.getElementsByClassName('l')[i].onclick = indexClosure(i);

しかし、その後this、私のリンクを参照しなくなります...この問題はどのように解決されますか?

4

2 に答える 2

3

クロージャを使用して、サイクルのカウンタをキャプチャします。

var numItems = document.getElementsByClassName('l').length;
for (var i = 0; i < numItems; i++) {
  (function(i){
    document.getElementsByClassName('l')[i].onclick = function (e){
      preview(this.href, i);
    };
  }(i))
}
于 2011-10-13T16:21:36.720 に答える
0

onclick pass inを使用して、アクセスできるようにしません(sender, eventArgs)か?thissender

于 2011-10-13T16:21:31.633 に答える