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

Pau*_*fer 274 jquery function parameter-passing

我试图使用jQuery的.click调用带参数的函数,但我无法让它工作.

这就是我希望它的工作方式:

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

哪个叫

function add_event(event) {
    blah blah blah }
Run Code Online (Sandbox Code Playgroud)

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

$('.leadtoscore').click(add_event);
function add_event() {
    blah blah blah }
Run Code Online (Sandbox Code Playgroud)

但我需要能够将参数传递给我的add_event函数.

我怎么能做这个特定的事情?

我知道我可以使用.click(function() { blah },但是我add_event从多个地方调用该函数并希望以这种方式执行.

Chr*_*pen 497

为了彻底,我遇到了另一个解决方案,它是jQuery click事件处理程序 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);
}
Run Code Online (Sandbox Code Playgroud)

我知道这个问题在游戏中已经很晚了,但之前的答案让我得到了这个解决方案,所以我希望它能帮到某个人!

  • 这正是我想要的(当时).从那以后我没有参与这个项目,但我认为我使用的是1.4.0.这绝对是最好的方式. (11认同)
  • @totymedli - 我想你总是可以在其他地方调用它,传递一个相同结构的对象:`var param_obj = {data:{param1:"Hello",param2:"World"}}; cool_function(param_obj);`? (5认同)

Nic*_*ver 77

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

$('.leadtoscore').click(function() {
  add_event('shot')
});
Run Code Online (Sandbox Code Playgroud)

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

$('.leadtoscore').click(add_event);
Run Code Online (Sandbox Code Playgroud)

但是这个add_event方法不会得到'shot'它的参数,而是click传递给它的回调,它就是event对象本身......因此它不适用于这种情况,但适用于许多其他方法.如果您需要传递参数,请使用匿名函数...或者,还有另一个选项,使用.bind()和传递数据,如下所示:

$('.leadtoscore').bind('click', { param: 'shot' }, add_event);
Run Code Online (Sandbox Code Playgroud)

并访问它add_event,如下所示:

function add_event(event) {
  //event.data.param == "shot", use as needed
}
Run Code Online (Sandbox Code Playgroud)

  • @phoffer - 是的,"只是"意味着没有参数,*只是*函数名称,它是对函数的引用,而不是运行要分配给`click`处理程序的函数的结果.在上面的匿名方法和`.bind()`示例中,您可以使用`this`,它将引用您单击的`.loadtoscore`(就像您期望的那样).在最后一个例子中,在`add_event(event)`里面也是如此,使用`this`或`$(this)`它就是你想要的. (2认同)

use*_*716 35

如果你按照它的方式来称呼它......

$('.leadtoscore').click(add_event('shot'));
Run Code Online (Sandbox Code Playgroud)

...你需要add_event()返回一个函数,比如......

function add_event(param) {
    return function() {
                // your code that does something with param
                alert( param );
           };
}
Run Code Online (Sandbox Code Playgroud)

返回该函数并将其用作参数.click().


Gra*_*ave 24

我成功使用.on()如下:

$('.leadtoscore').on('click', {event_type: 'shot'}, add_event);
Run Code Online (Sandbox Code Playgroud)

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

event.data.event_type
Run Code Online (Sandbox Code Playgroud)

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

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


Kev*_*vin 10

是的,这是一个老帖子.无论如何,有人可能会发现它很有用.这是将参数发送到事件处理程序的另一种方法.

//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});
Run Code Online (Sandbox Code Playgroud)


小智 5

      $imgReload.data('self', $self);
            $imgReload.click(function (e) {
                var $p = $(this).data('self');
                $p._reloadTable();
            });
Run Code Online (Sandbox Code Playgroud)

将javaScript对象设置为onclick元素:

 $imgReload.data('self', $self);
Run Code Online (Sandbox Code Playgroud)

从"this"元素获取Object:

 var $p = $(this).data('self');
Run Code Online (Sandbox Code Playgroud)


sus*_*097 5

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

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

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

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

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

这是直接的解决方案,有关详细信息的解决方案,请转到此处