Клонирование JavaScript с помощью for()

Пример это и это не работает. В чем моя ошибка?

var i=1;
for(i; i <=165; i++){
    jQuery(".tekAlan"+i).click(function() {   
    jQuery(".tekAlan"+i).addClass("tekAlanSecildi");    
    });
}

Благодарю.

3 ответа

Решение

Полагаю, вы хотите добавить только к выбранному элементу класс. Тем не менее, он всегда добавляет класс к последнему. Это потому, что ко мне обращаются после конца for, поэтому он всегда содержит 165. Сделайте это, чтобы решить вашу проблему:

var i=1;
for(i; i <=165; i++){
    jQuery(".tekAlan"+i).click(function() {   
        jQuery(this).addClass("tekAlanSecildi");    
    });
}

jQuery(this) является ссылкой на элемент, затронутый событием (в этом случае click)

Вы проходите i по ссылке, а не по значению, так i не относится к числу, которое вы думаете, это после запуска цикла. Взгляните на этот простой пример, чтобы понять, что я имею в виду.

В этом случае вы, вероятно, можете просто использовать селектор атрибута и this:

jQuery('[class^="tekAlan"]').click(function() {   
    jQuery(this).addClass("tekAlanSecildi");    
});

Если вы хотите исправить свой текущий код, вам придется затенить i с анонимной функцией:

for(var i = 1; i <= 165; i++){
    (function(i) {
        jQuery(".tekAlan" + i).click(function() {   
            jQuery(".tekAlan" + i).addClass("tekAlanSecildi");    
        });
    })(i);
}

Хотя это не очень понятно, вы можете попробовать что-то вроде этого

1) добавить класс для всех ваших элементов

2)

$('.someclass').click(function(){

    $(this).addClass('someotherclass');

})

Вам не нужен цикл for.

Другие вопросы по тегам