我将以下内容附加到div元素,该元素检测用户何时右键单击div并调用函数theFunction
。
$('#box_'+i).bind('mousedown',function(e){if(e.which==3)theFunction(e,i)});
代码在循环内运行(其中i
变量递增),因为有多个div需要页面上的右键单击功能。但是,当调用theFunction
时,它始终传递i
的最后一个值,而不是完成bind()时的值。有没有办法让它保持不变,以便在循环运行时不会改变前一个div的i
?
答案 0 :(得分:5)
您必须在循环内部的本地范围内捕获i
的值:
// Start your loop
(function(i){
$('#box_'+i).bind('mousedown', function(e){
if (e.which==3) theFunction(e,i)
});
})(i);
// end your loop
答案 1 :(得分:1)
关闭解决方案都很好(它们工作正常),但我想我会指出另一种方法。您还可以访问触发事件的对象,并从对象的id中提取数字。这将是这样的:
$('#box_'+i).bind('mousedown',function(e){
var matches = this.id.match(/_(\d+)$/);
var num = parseInt(matches[1], 10);
if(e.which == 3) theFunction(e, num);
});
或者如果你真的想要面向对象(并使用jQuery的整洁功能),你可以将索引值保存为与对象关联的单独数据项,并在以后从那里检索它。
$('#box_'+i).data("index", i).bind('mousedown',function(e){
if(e.which == 3) theFunction(e, $(this).data("index"));
});
第二种方法的工作演示:http://jsfiddle.net/jfriend00/wVDHw/
答案 2 :(得分:0)
for(var i=0;i<100;i++)
(function(i){
$('#box_'+i).bind('mousedown',function(e){
if(e.which==3)
theFunction(e,i);
});
})(i);