Con código jQuery como:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
¿Cómo paso argumentos myfunction
mientras uso jQuery?
javascript
jquery
Edward Wong Hau Pepelu Tivrusk
fuente
fuente
Respuestas:
La forma más sencilla es hacerlo así (asumiendo que no desea que la información del evento se pase a la función) ...
jsFiddle .
Esto crea una función anónima, que se llama cuando
click
se activa el evento. Esto a su vez llamarámyfunction()
con los argumentos que proporciones.Si desea mantener el
ThisBinding
(el valor dethis
cuando se invoca la función, establecido en el elemento que desencadenó el evento), llame a la función concall()
.jsFiddle .
No puede pasar la referencia directamente en la forma en que indica su ejemplo, o su único argumento será el objeto jQuery
event
.Si usted no quiere pasar la referencia, debe aprovechar de jQuery
proxy()
función (que es un envoltorio de navegadores paraFunction.prototype.bind()
). Esto le permite pasar argumentos, que están vinculados antes delevent
argumento.jsFiddle .
En este ejemplo,
myfunction()
se ejecutaría con suThisBinding
intacto (null
no es un objeto, por lothis
que se usa el valor normal del elemento que desencadenó el evento), junto con los argumentos (en orden)arg1
,arg2
y finalmente elevent
objeto jQuery , que puede ignorar si no es necesario (ni siquiera lo nombre en los argumentos de la función).También puede usar el
event
objeto jQuerydata
para pasar datos, pero esto requeriría modificarlomyfunction()
para acceder a él a través deevent.data.arg1
(que no son argumentos de función como menciona su pregunta), o al menos introducir una función de proxy manual como el ejemplo anterior o uno generado utilizando el último ejemplo.fuente
myfunction(this, arg1, arg2)
desde el controlador anónimo. Entonces su función puede hacerlomyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2)
.También le permite vincular y desvincular controladores de eventos específicos utilizando los métodos on y off.
Ejemplo:
Esto desvincularía el controlador myfunction de #myid
fuente
Aunque ciertamente debería usar la respuesta de Alex, el método "bind" de la biblioteca prototipo se ha estandarizado en Ecmascript 5 y pronto se implementará en los navegadores de forma nativa. Funciona así:
fuente
this
Se establecerá en un contexto diferente si usa este método, por ejemplo, sibind()
lo hacethis
en ese contexto (global) puede resultar en que el controlador de clic tenga elwindow
objetothis
en lugar de una referencia al#myid
elemento?people reading my answers are smart enough to figure these details out themselves
, no sobre Ecmascript.Hilo antiguo, pero con fines de búsqueda; tratar:
... y consulte el parámetro "datos": http://api.jquery.com/on/
p.ej:
fuente
Ya hay grandes respuestas, pero de todos modos, aquí están mis dos centavos. También puedes usar:
$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)
Y el oyente se vería así:
function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }
fuente
Sencillo:
fuente