jQuery的.click – 传递参数给用户函数

我想使用jQuery的.click参数调用一个函数,但我不能得到它的工作。

这是我想要它的工作原理:

$('.leadtoscore').click(add_event('shot'));

哪个叫

 function add_event(event) { blah blah blah } 

它可以工作,如果我不使用参数,如下所示:

 $('.leadtoscore').click(add_event); function add_event() { blah blah blah } 

但我需要能够传递一个参数到我的add_event函数。

我怎么能做这个具体的事情?

我知道我可以使用.click(function() { blah } ,但我从多个地方调用add_event函数,并希望这样做。

为了彻底,我遇到了另一个解决scheme,它是jQuery click事件处理程序的 1.4.3版本中引入的function的一部分。

它允许你传递一个数据映射到事件对象,通过jQuery作为第一个参数自动返回到事件处理函数。 数据映射将作为第一个parameter passing给.click()函数,然后是事件处理函数。

下面是一些代码来说明我的意思:

 // say your selector and click handler looks something like this... $("some selector").click({param1: "Hello", param2: "World"}, cool_function); // in your function, just grab the event object and go crazy... function cool_function(event){ alert(event.data.param1); alert(event.data.param2); } 

我知道这个问题在游戏中已经晚了,但是之前的答案让我想到了这个解决scheme,所以我希望它能帮助别人!

你需要使用这样的匿名函数:

 $('.leadtoscore').click(function() { add_event('shot') }); 

您可以像在示例中那样调用它,只是一个不带参数的函数名称,如下所示:

 $('.leadtoscore').click(add_event); 

add_event方法不会因为它的参数而被'shot' ,而是无论click传递给它的callback函数( event对象本身),所以在这种情况下它不适用,但是适用于其他许多方法。 如果您需要传递参数,请使用匿名函数…或者,还有一个选项,使用.bind()并传递数据,如下所示:

 $('.leadtoscore').bind('click', { param: 'shot' }, add_event); 

并在add_event访问它,如下所示:

 function add_event(event) { //event.data.param == "shot", use as needed } 

如果你这样称呼它的话

 $('.leadtoscore').click(add_event('shot')); 

…你需要有add_event()返回一个函数,如…

 function add_event(param) { return function() { // your code that does something with param alert( param ); }; } 

该函数被返回并用作.click()的参数。

我已经成功使用.on()像这样:

 $('.leadtoscore').on('click', {event_type: 'shot'}, add_event); 

然后在add_event函数中,你可以像这样访问'shot':

 event.data.event_type 

有关更多信息,请参阅.on()文档 ,其中提供了以下示例:

 function myHandler( event ) { alert( event.data.foo ); } $( "p" ).on( "click", { foo: "bar" }, myHandler ); 

是的,这是一个旧post。 无论如何,有人可能会觉得它有用。 这是将参数发送给事件处理程序的另一种方法。

 //click handler function add_event(event, paramA, paramB) { //do something with your parameters alert(paramA ? 'paramA:' + paramA : '' + paramB ? ' paramB:' + paramB : ''); } //bind handler to click event $('.leadtoscore').click(add_event); ... //once you've processed some data and know your parameters, trigger a click event. //In this case, we will send 'myfirst' and 'mysecond' as parameters $('.leadtoscore').trigger('click', {'myfirst', 'mysecond'}); //or use variables var a = 'first', b = 'second'; $('.leadtoscore').trigger('click', {a, b}); $('.leadtoscore').trigger('click', {a}); 
  $imgReload.data('self', $self); $imgReload.click(function (e) { var $p = $(this).data('self'); $p._reloadTable(); }); 

将javaScript对象设置为onclick元素:

  $imgReload.data('self', $self); 

从“this”元素获取Object:

  var $p = $(this).data('self');