将参数传递给 jQuery .click WHILE 保留事件参数

Passing arguments to jQuery .click WHILST keeping event parameter

本文关键字:保留 事件 参数 WHILE click 参数传递 jQuery      更新时间:2023-09-26

我需要使用将click事件绑定到 DOM 中的元素,同时能够动态传递参数,包括事件对象。我当前的脚本使用以下脚本:

var counter = 1;
$(".dynamo_user_info .dynamo_awards").each(function(){
    $(this).find("~ div a").each(function(){
        var id = $(this).attr("rel").split("aid-")[1];
        $(this).attr("id","dynamo_award-"+counter+"-"+id).bind('click',{c:counter,i:id},function(e){
            e.returnValue = e.preventDefault && e.preventDefault() ? false : false;
            dynamo.awards.tooltip.ini(c,i);
        });
    });
    counter++;
});

现在,如您所见,每次迭代时counter都会增加,并且id不保存静态值。每次迭代后,最终值为:counter = 4id = 2。现在,每当单击这些元素之一时,它都会根据需要preventDefaults,然后运行dynamo.awards.tooltip.ini(c,i);

但是,这不会按预期工作。而不是运行:

dynamo.awards.tooltip.ini(1,1); dynamo.awards.tooltip.ini(2,6);

等(例如),它改为运行:

dynamo.awards.tooltip.ini(4,2); dynamo.awards.tooltip.ini(4,2);

即它使用最后存储的值进行counterid。我的猜测是它这样做是由于bind的工作方式,在单击元素传递参数,而不是在单击之前。我不确定如何解决这个问题,除非我可以以某种方式欺骗函数的范围?

参数可以通过 event.data 对象访问,例如

dynamo.awards.tooltip.ini(e.data.c, e.data.i);

http://api.jquery.com/bind/#passing-event-data