如何在jquery中传递'constant'参数

时间:2011-09-02 14:06:10

标签: javascript jquery for-loop

我将以下内容附加到div元素,该元素检测用户何时右键单击div并调用函数theFunction

$('#box_'+i).bind('mousedown',function(e){if(e.which==3)theFunction(e,i)});

代码在循环内运行(其中i变量递增),因为有多个div需要页面上的右键单击功能。但是,当调用theFunction时,它始终传递i的最后一个值,而不是完成bind()时的值。有没有办法让它保持不变,以便在循环运行时不会改变前一个div的i

3 个答案:

答案 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);