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');