Jquery each() Counter
Я немного поработал над документацией и провел некоторое время в сети, но не могу найти решение для этого! Я хочу, чтобы предупреждение сообщило мне, какая итерация каждого() была включена, когда щелчок .thumb нажат.
EG: Есть шесть .thumb Я нажимаю на номер 3, браузер всплывает 3!
Что на самом деле происходит независимо от того, какой щелчок нажал. 6 всплывает.
var counter = 1;
$('.thumb').each(function () {
$(this).click(function () {
alert (counter);
});
counter++;
});
Любая помощь с благодарностью получена.
Ответы
Ответ 1
Это потому, что вы используете одну и ту же переменную counter
для всех обработчиков click
, и это то, что заканчивается в конце цикла. Вместо этого используйте тот, который был передан в цикл (индексный параметр .each()
, который уже существует):
$('.thumb').each(function (i) {
$(this).click(function () {
alert (i+1); //index starts with 0, so add 1 if you want 1 first
});
});
Вы можете протестировать его здесь.
Ответ 2
Вызов функции() - анонимное объявление функции. Вы должны понимать, как работают функции LISP (да, ecmascript - lisp).
Вместо $('. thumb') каждый, вы должны использовать что-то вроде (untested):
var list = $('.thumb');
for(var i=0; i<list.length; i++) {
$(list[i]).click(function(){
alert(i);
});
}
Ответ 3
Чтобы использовать такое решение, как @Paulo, вам нужно сделать это следующим образом:
var list = $('.thumb');
for(var i=0; i<list.length; i++) {
(function( i_local ) {
list.eq( i ).click(function(){
alert(i_local);
});
})( i + 1 );
}
... хотя я использовал вместо @Nicks .each()
решение. Гораздо чище.