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