Com código jQuery como:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Como faço para passar argumentos myfunctionao usar jQuery?
Com código jQuery como:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Como faço para passar argumentos myfunctionao usar jQuery?
Respostas:
A maneira mais simples é fazer assim (assumindo que você não deseja que nenhuma informação do evento seja passada para a função) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Isso cria uma função anônima, que é chamada quando o clickevento é disparado. Isso, por sua vez, chamará myfunction()com os argumentos que você fornecer.
Se você deseja manter o ThisBinding(o valor de thisquando a função é chamada, defina como o elemento que disparou o evento), chame a função com call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Você não pode passar a referência diretamente da forma como seu exemplo afirma, ou seu único argumento será o objeto jQueryevent .
Se você não quiser passar a referência, você deve aproveitar do jQuery proxy()função (que é um wrapper cross browser para Function.prototype.bind()). Isso permite que você passe argumentos, que são vinculados antes do eventargumento.
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
Neste exemplo, myfunction()seria executado com seu ThisBindingintacto ( nullnão é um objeto, portanto, o thisvalor normal do elemento que acionou o evento é usado), junto com os argumentos (em ordem) e arg1, arg2finalmente, o eventobjeto jQuery , que você pode ignorar se não for necessário (nem mesmo nomeie nos argumentos da função).
Você também pode usar o eventobjeto jQuery datapara passar dados, mas isso exigiria modificação myfunction()para acessá-lo via event.data.arg1(que não são argumentos de função como sua pergunta menciona), ou pelo menos a introdução de uma função de proxy manual como o exemplo anterior ou gerado usando o último exemplo.
myfunction(this, arg1, arg2)do manipulador anônimo. Então sua função pode fazermyfunction(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'
});
Também permite vincular e desvincular manipuladores de eventos específicos usando os métodos on e off.
Exemplo:
$("#myid").off('click', myfunction);
Isso desvincularia o manipulador de myfunction de #myid
embora você certamente deva usar a resposta de Alex, o método "bind" da biblioteca de protótipos foi padronizado no Ecmascript 5 e logo será implementado em navegadores nativamente. Funciona assim:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisdefinido para um contexto diferente se você usar esse método, por exemplo, bind()fazê-lo thisnesse contexto (global) pode resultar no manipulador de cliques com o windowobjeto thisem vez de uma referência ao #myidelemento?
people reading my answers are smart enough to figure these details out themselves, não sobre Ecmascript.
Tópico antigo, mas para fins de pesquisa; experimentar:
$(selector).on('mouseover',...);
... e verifique o parâmetro "data": http://api.jquery.com/on/
por exemplo:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );