【问题标题】:How to pass a 'constant' parameter in jquery如何在 jquery 中传递“常量”参数
【发布时间】:2011-09-02 14:06:09
【问题描述】:
我在 div 元素上附加了以下内容,它检测用户何时右键单击 div 并调用函数theFunction。
$('#box_'+i).bind('mousedown',function(e){if(e.which==3)theFunction(e,i)});
代码在循环中运行(其中i 变量递增),因为页面上有多个需要右键单击功能的 div。但是,当调用 theFunction 时,它总是传递 i 的最后一个值,而不是完成 bind() 时的值。有没有办法让它保持不变,这样在循环运行时它不会改变之前的 div 的 i?
【问题讨论】:
标签:
javascript
jquery
for-loop
【解决方案1】:
您必须在循环内部的本地范围内捕获 i 的值:
// Start your loop
(function(i){
$('#box_'+i).bind('mousedown', function(e){
if (e.which==3) theFunction(e,i)
});
})(i);
// end your loop
【解决方案2】:
关闭解决方案都很好(它们工作得很好),但我想我会指出另一种方法来做到这一点。您还可以访问触发事件的对象并从对象的 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/
【解决方案3】:
for(var i=0;i<100;i++)
(function(i){
$('#box_'+i).bind('mousedown',function(e){
if(e.which==3)
theFunction(e,i);
});
})(i);