我有以下需要封闭的代码:
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
将不再引用我的链接......这个问题是如何解决的?
答案 0 :(得分: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))
}
答案 1 :(得分:0)
没有点击(sender, eventArgs)
传递,允许您通过this
访问sender
?