我需要在for循环中使用click函数,因此每个id元素都是可单击的。但是我在点击功能中也需要i,这就是为什么我认为自动执行匿名函数是最好的方法。但由于某些原因,这不起作用,可能是因为点击功能不允许我转发参数?我做错了什么?
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(idx) {
alert(idx);
})(i)
}
答案 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'也将与您同在,并且所有项目都是可点击的。而你只是绑定一个处理函数。