0

我需要一个 for 循环中的点击函数,所以每个 id 元素都是可点击的。但我也需要点击函数中的 i,这就是为什么我认为自执行匿名函数是最好的方法。但由于某种原因,这不起作用,也许是因为点击功能不允许我转发参数?我做错了什么?

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

4 回答 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 小提琴:http: //jsfiddle.net/HuHXr/

于 2014-02-26T10:38:30.020 回答
1

作为旁注,使用 bind() javascript方法:

for (var i = 0; i < countItems; i++) {
    $("#item-" + i).click(function(indx){
           alert(indx);
    }.bind($("#item-" + i)[0],i));
}
于 2014-02-26T10:44:43.390 回答
0
for (var i = 0; i < countItems; i++) {
   (function(i){  
        $("#item-" + i).click(function(idx) {
           alert(idx);
        });
   })(i);
}

另请注意,这idx是事件对象。小提琴:http: //jsfiddle.net/2DRLx/

于 2014-02-26T10:37:56.767 回答
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”也将与您同在,并且所有项目都是可点击的。你只是绑定一个处理函数。

于 2014-02-26T10:39:31.427 回答