С кодом jQuery, например:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Как передать аргументы myfunction
при использовании jQuery?
javascript
jquery
Эдвард Вонг Хау Пепелу Тивруск
источник
источник
Ответы:
Самый простой способ - сделать это так (при условии, что вы не хотите, чтобы какая-либо информация о событии передавалась в функцию) ...
$("#myid").click(function() { myfunction(arg1, arg2); });
jsFiddle .
Это создает анонимную функцию, которая вызывается при
click
запуске события. Это, в свою очередь, вызоветmyfunction()
предоставленные вами аргументы.Если вы хотите сохранить
ThisBinding
(значение,this
когда функция вызывается, установить для элемента, который вызвал событие), тогда вызовите функцию с помощьюcall()
.$("#myid").click(function() { myfunction.call(this, arg1, arg2); });
jsFiddle .
Вы не можете передать ссылку напрямую, как указано в вашем примере, иначе ее единственным аргументом будет объект jQuery
event
.Если вы действительно хотите передать ссылку, вы должны использовать JQuery в
proxy()
функцию (которая является кросс - браузер обертка дляFunction.prototype.bind()
). Это позволяет передавать аргументы, которые связаны , прежде чем вevent
аргументе.$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
В этом примере,
myfunction()
будет выполнено с егоThisBinding
нетронутым (null
не является объект, поэтому нормальноеthis
значение элемента , который срабатывает, используется событие), наряду с аргументами (по порядку)arg1
,arg2
и , наконец, JQueryevent
объекта, который можно игнорировать если он не требуется (даже не называйте его в аргументах функции).Вы также можете использовать
event
объект jQuerydata
для передачи данных, но это потребует изменения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 );
источник
Уже есть отличные ответы, но в любом случае вот мои два цента. Вы также можете использовать:
$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)
И слушатель выглядел бы так:
function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }
источник
Просто:
$(element).on("click", ["Jesikka"], myHandler); function myHandler(event){ alert(event.data); //passed in "event.data" }
источник