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 из нескольких мест и хочу сделать это таким образом.

Ответ 1

Для тщательности я столкнулся с другим решением, которое было частью функциональности, представленной в версии 1.4.3 jQuery обработчиком событий click.

Он позволяет передавать карту данных объекту события, который автоматически возвращается к функции обработчика события с помощью 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);
}

Я знаю это в конце игры для этого вопроса, но предыдущие ответы привели меня к этому решению, поэтому я надеюсь, что когда-нибудь это поможет кому-то!

Ответ 2

Вам нужно использовать анонимную функцию:

$('.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
}

Ответ 3

Если вы называете это так, как вы это сделали...

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

... вам понадобится add_event() вернуть функцию, например...

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

Функция возвращается и используется как аргумент для .click().

Ответ 4

У меня был успех с использованием .on() следующим образом:

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

Затем внутри функции add_event вы получаете доступ к "выстрелу" следующим образом:

event.data.event_type

Дополнительную информацию см. в документации .on(), где они приводят следующий пример:

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

Ответ 5

Да, это старый пост. Независимо, кто-то может сочтет это полезным. Вот еще один способ отправки параметров обработчикам событий.

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

Ответ 6

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