Переменная в неправильной области видимости (возможно, нуждается в закрытии?) - PullRequest
0 голосов
/ 13 октября 2011

У меня есть следующий код, который нуждается в закрытии:

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 больше не будет ссылаться на мою ссылку ... как эта проблемарешена?

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Используйте замыкание для захвата счетчика цикла:

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))
}
0 голосов
/ 13 октября 2011

не передает по клику (sender, eventArgs), позволяя получить доступ от this до sender?

...