2011-10-23 12 views
9

Tengo una función personalizada y quiero agregarle una función de devolución de llamada, miré las otras preguntas pero no pude encontrar la respuesta para mi problema. Así que básicamente se parece a esto:Jquery llamando a una función de devolución de llamada en una función personalizada

function myfunction() { 
// something 
} 

Y tengo una función diferente que quiero disparar como una devolución de llamada, con el tiempo quiero llamar mifuncion así:

myfunction(callback()); 

Entonces, ¿puede alguien por favor diga mi la manera de hacer esto?

Respuesta

20

ustedes lo llaman así (que pasa a la función de devolución de llamada como un argumento):

myfunction(myCallbackFn); 

en cuenta que no hay paréntesis después del nombre de la función cuando se pasa una referencia a la función como un argumento. Esto no invoca la función, sino que pasa una referencia a la misma que luego se puede llamar más tarde desde su función personalizada.

Se podría definir su función y después llama a la función de devolución de llamada de esta manera:

function myfunction(cb) { 
    cb(arg1, arg2); 
} 

Nota, hay varios métodos de realidad llamando a la función de devolución de llamada desde dentro de la función personalizada. Si sólo tiene que llamar con normalidad y no se preocupan por el argumento this, sólo puede utilizar:

cb(); 

Si desea establecer el argumento this a algo, puede utilizar esto:

cb.call(thisArg, arg1, arg2); 

Si desea pasar a lo largo de sus argumentos actuales o pasar una matriz de argumentos y establecer el argumento this, se utilizaría la siguiente:

cb.apply(thisArg, argArray); 

Referencias en .call() y .apply().


Su código actual tiene un error de JavaScript en esta área:

test(rand_gyumolcs, link, callback){ 
    callback(); 
}; 

Esto no es legal Javascript. No sé lo que intenta hacer, pero parece la mitad de una declaración de función y la mitad de una llamada a función. Si lo que desea es llamar a la función de prueba, usted sólo tiene que utilizar esto:

test(rand_gyumolcs, link, callback); 

Dentro de prueba, si desea que la función de devolución de llamada a ser llamado después de la animación se ha completado, entonces habría que enganchar la terminación función de la animación y llame a la devolución de llamada a continuación.

+0

Parece que no funciona para mí jfriend00 ... probablemente sea mi error, pero ¿podría echar un vistazo? El código es un poco complicado, lo sé, no soy tan bueno en jquery ... http://ridewithus.co.cc/test/ –

+0

si puedes ver ... quiero que las frutas del lado derecho se muevan, y la función de prueba lo hace, pero también tengo una función de devolución de llamada que debería devolverlos a su posición original –

+0

. Publique el código relevante en su pregunta original o proporcione una descripción muy específica de dónde está el código en su página y cómo lo desencadena Has publicado una página web con cinco páginas de script incrustadas y no tengo idea de qué parte del código estás preguntando. – jfriend00

4

aviso No estoy invocando la devolución de llamada sino simplemente pasándola como una función de referencia a mi función. Luego lo invoco en la función al final o donde quiera que lo haga.

+1

... @Keith que necesita para aprobar la función real que tiene que ejecutar cuando se declara mifuncion: es decir mifuncion (función() {alerta "hola";}); no myfunction (devolución de llamada); – bouk

7

He aquí un ejemplo con una devolución de llamada con un valor de retorno, que también está tomando parámetros de entrada:

function test2(arg1, arg2, callback) { 
    var result = callback(arg1, arg2); 

    alert('arg1=' + arg1 + ', arg2=' + arg2 + ', result=' + result); 
} 

test2(1, 2, function(a, b) { return a + b; }); 
Cuestiones relacionadas