JQuery's .click - передать параметры пользовательской функции - PullRequest
265 голосов
/ 18 июля 2010

Я пытаюсь вызвать функцию с параметрами, используя jcuery'sclick, но не могу заставить ее работать.

Вот как я хочу, чтобы это работало:

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

Ответы [ 7 ]

481 голосов
/ 27 февраля 2012

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

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

77 голосов
/ 18 июля 2010

Вам необходимо использовать анонимную функцию, например, такую:

$('.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
}
34 голосов
/ 18 июля 2010

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

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

... вам нужно, чтобы add_event() возвращал функцию, например ...

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

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

23 голосов
/ 07 июня 2015

Я успешно использовал .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 );
9 голосов
/ 29 мая 2014

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

//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});
5 голосов
/ 27 февраля 2014
      $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');
2 голосов
/ 13 августа 2018

Я получаю простое решение:

 <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 выполнено и используется это значение.

Это прямое решение, а для решения Подробно перейдите Здесь .

...