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函数,并且想这样做。

497537 次浏览

你需要像这样使用一个匿名函数:

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

你可以像在例子中那样调用它,只是一个函数名没有参数,如下所示:

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

但是add_event方法不会得到'shot'作为参数,而是得到click传递给它的回调的任何东西,即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()的参数。

为了彻底起见,我遇到了另一个解决方案,它是jQuery 单击事件处理程序。 1.4.3版本中引入的功能的一部分

它允许您将数据映射传递给事件对象,该对象将自动作为第一个参数由jQuery反馈给事件处理程序函数。数据映射将作为第一个参数传递给.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);
}
      $imgReload.data('self', $self);
$imgReload.click(function (e) {
var $p = $(this).data('self');
$p._reloadTable();
});

设置javaScript对象为onclick元素:

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

从"this"元素获取对象:

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

是的,这是一个旧帖子。不管怎样,有人可能会发现它很有用。下面是另一种向事件处理程序发送参数的方法。

//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});

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

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

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

event.data.event_type

有关更多信息,请参阅内用()的文档,其中它们提供了以下示例:

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

我得到了一个简单的解决方案:

 <button id="btn1" onclick="sendData(20)">ClickMe</button>


<script>
var id; // global variable
function sendData(valueId){
id = valueId;
}
$("#btn1").click(function(){
alert(id);
});
</script>

我的意思是,将值onclick事件传递给javascript function sendData(),初始化到变量,并通过jquery事件处理程序方法获取它。

这是可能的,因为首先调用sendData(valueid)并初始化值。然后在jquery事件之后执行get并使用该值。

这是直接的解决方案,详细解决方案在这里

因为没有人指出这一点(令人惊讶)。你的问题是,$('.leadtoscore').click(add_event);$('.leadtoscore').click(add_event('shot'));不一样。第一个传递一个函数,第二个传递一个函数调用,因此该函数的结果被传递给.click()。这不是你想要的。下面是你想要的JavaScript术语:

$('.leadtoscore').click(add_event.bind(this, 'shot'));

Function.prototype.bind()将函数传递给.click(),就像在第一个例子中一样,但是绑定了this和在调用时可访问的参数。