在for循环中自行执行匿名点击功能

时间:2014-02-26 10:32:53

标签: javascript jquery html5 css3 self-executing-function

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

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

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分: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'也将与您同在,并且所有项目都是可点击的。而你只是绑定一个处理函数。