С кодом jQuery, например:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Как передать аргументы myfunctionпри использовании jQuery?
С кодом jQuery, например:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Как передать аргументы myfunctionпри использовании jQuery?
Ответы:
Самый простой способ - сделать это так (при условии, что вы не хотите, чтобы какая-либо информация о событии передавалась в функцию) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Это создает анонимную функцию, которая вызывается при clickзапуске события. Это, в свою очередь, вызовет myfunction()предоставленные вами аргументы.
Если вы хотите сохранить ThisBinding(значение, thisкогда функция вызывается, установить для элемента, который вызвал событие), тогда вызовите функцию с помощью call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Вы не можете передать ссылку напрямую, как указано в вашем примере, иначе ее единственным аргументом будет объект jQueryevent .
Если вы действительно хотите передать ссылку, вы должны использовать JQuery в proxy()функцию (которая является кросс - браузер обертка для Function.prototype.bind()). Это позволяет передавать аргументы, которые связаны , прежде чем в eventаргументе.
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
В этом примере, myfunction()будет выполнено с его ThisBindingнетронутым ( nullне является объект, поэтому нормальное thisзначение элемента , который срабатывает, используется событие), наряду с аргументами (по порядку) arg1, arg2и , наконец, JQuery eventобъекта, который можно игнорировать если он не требуется (даже не называйте его в аргументах функции).
Вы также можете использовать eventобъект jQuery dataдля передачи данных, но это потребует изменения myfunction()для доступа к нему через event.data.arg1(которые не являются аргументами функции, как упоминается в вашем вопросе) или, по крайней мере, введение ручной прокси-функции, такой как предыдущий пример или сгенерированный используя последний пример.
myfunction(this, arg1, arg2)анонимный обработчик. Тогда ваша функция может работатьmyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2).
$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction);
function myfunction(e) {
var arg1 = e.data.arg1;
var arg2 = e.data.arg2;
alert(arg1);
alert(arg2);
}
//call method directly:
myfunction({
arg1: 'hello agian',
arg2: 'bye again'
});
Также позволяет связывать и отменять привязку определенных обработчиков событий с помощью методов включения и выключения.
Пример:
$("#myid").off('click', myfunction);
Это отвяжет обработчик myfunction от #myid
хотя вам, безусловно, следует использовать ответ Алекса, метод "привязки" библиотеки прототипов стандартизирован в Ecmascript 5 и скоро будет встроен в браузеры. Это работает так:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisли установлен другой контекст, если вы используете этот метод, например, bind()его использование thisв этом контексте (глобальном) может привести к тому, что этот обработчик кликов будет иметь windowобъект, thisа не ссылку на #myidэлемент?
people reading my answers are smart enough to figure these details out themselves, а не на Ecmascript.
Старая ветка, но для целей поиска; пытаться:
$(selector).on('mouseover',...);
... и проверьте параметр "данные": http://api.jquery.com/on/
например:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );