Это классическая ошибка "переменные цикла не работают должным образом в обратных вызовах".
Ваша переменная l
больше не имеет первоначально предоставленного значения к тому времени, когда вызывается обратный вызов, - оно имеет любое конечное значение, которое было присвоено в последнем проходе цикла.
[FWIW, l
на самом деле не является объектом jQuery, поэтому вы должны обернуть его - $(l)
, чтобы использовать его с jQuery]
Обычное исправление ошибки цикла заключается в создании дополнительного замыкания, которое возвращает функцию привязанную к текущему значению:
for (var l in b) { // NB: don't use `for ... in ...` on array-like objects!
var make_cb = function(n) {
return function() {
var visIndex = $(n).index();
console.log(visIndex);
}
}
$(l).click(make_cb(l));
};
К счастью, вам вообще не нужен цикл - вы можете сделать так, чтобы jQuery автоматически добавлял обратный вызов к каждому элементу сам по себе:
b = $(slipStream.conf.controls).find('li img');
b.click(function() {
var visIndex = $(this).index();
console.log(visIndex);
});