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);
  };
}

发生的情况是,每当单击一个项目时,预览总是相同的数字

我怀疑我需要做的是

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(sender, eventArgs)不让你this通过sender吗?

于 2011-10-13T16:21:31.633 回答