我需要使用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 = 4
,id = 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);
,即它使用counter
和id
的最后存储值。我的猜测是由于bind
如何工作,在点击元素时传递参数,而不是之前传递参数。我不知道如何解决这个问题,除非我能以某种方式欺骗函数的范围?
答案 0 :(得分:2)
可以通过event.data对象访问参数,例如
dynamo.awards.tooltip.ini(e.data.c, e.data.i);