Самостоятельно выполняющая функция анонимного клика в цикле for

0

Мне нужна функция щелчка в цикле for, так что каждый элемент id можно щелкнуть. Но я также нуждаюсь в я в функции щелчка, поэтому я думал, что само выполнение анонимной функции будет лучшим способом сделать это. Но по какой-то причине это не работает, может быть, потому что функция click не позволяет мне перенаправить параметр? Что я сделал не так?

for (var i = 0; i < countItems; i++) {     
        $("#item-" + i).click(function(idx) {
           alert(idx);
    })(i)
}
  • 0
    событие всегда передается в качестве первого параметра обработчика события. Во всяком случае, вы не должны использовать какой-либо цикл здесь. Вместо этого используйте класс в качестве селектора или для установки только одного обработчика, делегируйте событие. Если предполагается, что idx является идентификатором this.id элемента, this.id вернет его
  • 0
    Иногда на вопросы с таким небольшим количеством кода можно было бы подумать, что было бы легче ответить, но когда многие вещи идут не так, как надо, я даже не знаю, с чего начать ... Пропустить.
Показать ещё 1 комментарий
Теги:
self-executing-function

4 ответа

1
Лучший ответ

Функция самоисполнения должна возвращать function:

for (var i = 0; i < countItems; i++) {
    $("#item-" + i).click(function(indx){
        return function(){  //must return a function
           alert(indx);
        }
    }(i));
}

JS Fiddle: http://jsfiddle.net/HuHXr/

1

В качестве примечания стороны, используя метод bind() javascript:

for (var i = 0; i < countItems; i++) {
    $("#item-" + i).click(function(indx){
           alert(indx);
    }.bind($("#item-" + i)[0],i));
}
0

вы можете попробовать что-то подобное

for (var i = 0; i < countItems; i++) {     
    $("#item-" + i).click(clickFunctn);
}

function clickFunctn(obj){
    var i=$(obj).attr('id').split('-')[1];
    alert(i);
}

Таким образом, вы будете оптимизировать код, и ваше "i" будет с вами, а все элементы доступны для просмотра. И вы просто привязываете одну функцию обработчика.

0
for (var i = 0; i < countItems; i++) {
   (function(i){  
        $("#item-" + i).click(function(idx) {
           alert(idx);
        });
   })(i);
}

Также обратите внимание, что idx - это объект события. Скрипт: http://jsfiddle.net/2DRLx/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню