Подтвердить что ты не робот

Jquery each() Counter

Я немного поработал над документацией и провел некоторое время в сети, но не могу найти решение для этого! Я хочу, чтобы предупреждение сообщило мне, какая итерация каждого() была включена, когда щелчок .thumb нажат.

EG: Есть шесть .thumb Я нажимаю на номер 3, браузер всплывает 3!

Что на самом деле происходит независимо от того, какой щелчок нажал. 6 всплывает.

var counter = 1;
$('.thumb').each(function () {
    $(this).click(function () {
        alert (counter);
    });
    counter++;
});

Любая помощь с благодарностью получена.

4b9b3361

Ответ 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() решение. Гораздо чище.