Мне нужна функция щелчка в цикле for, так что каждый элемент id можно щелкнуть. Но я также нуждаюсь в я в функции щелчка, поэтому я думал, что само выполнение анонимной функции будет лучшим способом сделать это. Но по какой-то причине это не работает, может быть, потому что функция click не позволяет мне перенаправить параметр? Что я сделал не так?
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(idx) {
alert(idx);
})(i)
}
Функция самоисполнения должна возвращать 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/
В качестве примечания стороны, используя метод bind() javascript:
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(indx){
alert(indx);
}.bind($("#item-" + i)[0],i));
}
вы можете попробовать что-то подобное
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(clickFunctn);
}
function clickFunctn(obj){
var i=$(obj).attr('id').split('-')[1];
alert(i);
}
Таким образом, вы будете оптимизировать код, и ваше "i" будет с вами, а все элементы доступны для просмотра. И вы просто привязываете одну функцию обработчика.
for (var i = 0; i < countItems; i++) {
(function(i){
$("#item-" + i).click(function(idx) {
alert(idx);
});
})(i);
}
Также обратите внимание, что idx
- это объект события. Скрипт: http://jsfiddle.net/2DRLx/
this.id
элемента,this.id
вернет его