Com código jQuery como:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Como faço para passar argumentos myfunction
ao usar jQuery?
javascript
jquery
Edward Wong Hau Pepelu Tivrusk
fonte
fonte
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) ...
jsFiddle .
Isso cria uma função anônima, que é chamada quando o
click
evento é disparado. Isso, por sua vez, chamarámyfunction()
com os argumentos que você fornecer.Se você deseja manter o
ThisBinding
(o valor dethis
quando a função é chamada, defina como o elemento que disparou o evento), chame a função comcall()
.jsFiddle .
Você não pode passar a referência diretamente da forma como seu exemplo afirma, ou seu único argumento será o objeto jQuery
event
.Se você não quiser passar a referência, você deve aproveitar do jQuery
proxy()
função (que é um wrapper cross browser paraFunction.prototype.bind()
). Isso permite que você passe argumentos, que são vinculados antes doevent
argumento.jsFiddle .
Neste exemplo,
myfunction()
seria executado com seuThisBinding
intacto (null
não é um objeto, portanto, othis
valor normal do elemento que acionou o evento é usado), junto com os argumentos (em ordem) earg1
,arg2
finalmente, oevent
objeto 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
event
objeto jQuerydata
para passar dados, mas isso exigiria modificaçãomyfunction()
para acessá-lo viaevent.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.fonte
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)
.Também permite vincular e desvincular manipuladores de eventos específicos usando os métodos on e off.
Exemplo:
Isso desvincularia o manipulador de myfunction de #myid
fonte
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:
fonte
this
definido para um contexto diferente se você usar esse método, por exemplo,bind()
fazê-lothis
nesse contexto (global) pode resultar no manipulador de cliques com owindow
objetothis
em vez de uma referência ao#myid
elemento?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:
... e verifique o parâmetro "data": http://api.jquery.com/on/
por exemplo:
fonte
Já existem ótimas respostas, mas de qualquer maneira, aqui estão meus dois centavos. Você também pode usar:
$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)
E o ouvinte ficaria assim:
function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }
fonte
Simples:
fonte