Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递给jQuery。在保留事件参数的同时单击_Javascript_Jquery_Scope_Click_Bind - Fatal编程技术网

Javascript 将参数传递给jQuery。在保留事件参数的同时单击

Javascript 将参数传递给jQuery。在保留事件参数的同时单击,javascript,jquery,scope,click,bind,Javascript,Jquery,Scope,Click,Bind,我需要使用bind将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).

我需要使用bind将
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++;
});
现在,正如您所看到的,
计数器
在每次迭代中都会增加,
id
不包含静态值。每次迭代后,最终值为:
counter=4
id=2
。现在,只要单击其中一个元素,它就会根据需要运行
dynamo.awards.tooltip.ini(c,i)

然而,这并没有达到预期的效果。而不是让它运行:

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

etc(例如),它将运行:

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


i、 e它使用
计数器
id
的最后存储值。我猜这是因为
bind
的工作方式,在单击元素时传递参数,而不是在单击之前。我不知道如何解决这个问题,除非我能以某种方式欺骗函数的作用域?

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

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

!啊,英国人<代码>:)
您需要理解。(另请参见和旧版)作为旁注,这一行似乎是多余的:
e.returnValue=e.preventDefault&&e.preventDefault()?假:假
@keirsimons您可能没有使用jQuery事件,jQuery已经规范化了
.preventDefault
自1.0 6年前添加
var c=counter,i=id
$.find().each()
范围,在
$上方。单击()
范围。这将在范围内保持它的价值,您不必用其他积垢(
)来干扰(
)。唯一的问题是,我会使用更具表现力的语法,比如说
var self\u counter=counter,self\u id=id