2009-07-20 14 views
9

Tengo esta función jQueryenviar una función jQuery devolución de llamada dentro de una variable

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     $("#widget_accordion").accordion({fillSpace: true}); 
    }); 
} 

que está funcionando bien cuando lo haga:

example('http://example.com/', "#divid", callback); 

pero quiero enviar la función de devolución de llamada en el interior del (de devolución de llamada) variable es decir: en lugar de unir el $ ("# widget_accordion"). acordeón ({fillSpace: true}); dentro de la función de devolución de llamada que desea enviar el mensaje:

example('http://example.com/', "#divid", '$("#widget_accordion").accordion({fillSpace: true});'); 

y luego la función debe ser algo como:

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    callback; 
}); 

pero que no funciona

Gracias de antemano por su ayuda

+0

¿Has probado la devolución de llamada(); ? –

+0

Lo intenté pero el problema es que la devolución de llamada es: $ ("# widget_accordion"). Acordeón ({fillSpace: true}); –

Respuesta

19

Para pasar la devolución de llamada, la variable debe ser de tipo función. Cualquiera de estos debería funcionar:

function example(file, targetwidget, callback) { 
    $(targetwidget).load(file, {limit:25}, callback); 
} 

// Call it by providing the function parameter via inline anonymous function: 
example('http://example.com/', "#divid", function() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
}); 

// Or, declare a function variable and pass that in: 
var widgetCallback = function() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
}; 

example('http://example.com/', "#divid", widgetCallback); 

// Or, declare the function normally and pass that in: 
function widgetCallback() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
} 

example('http://example.com/', "#divid", widgetCallback); 
+0

para agregar a esta gran respuesta, es posible que desee agregar validación a esto también, sugiero usar jquery's $ .isFunction() (http://api.jquery.com/jQuery.isFunction/) – Eman

2

necesita invocar la función dentro de la devolución de llamada

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    callback(); 
}); 
+0

pero callback = $ ("# widget_accordion"). Acordeón ({fillSpace: true}); Lo intentaré –

+0

, aún necesita invocar la función llamándola con() – redsquare

+0

suponiendo que la devolución de llamada es de hecho una función válida. – redsquare

1

Esto debería funcionar:

$(targetwidget).load(file, {limit: 25}, callback); 
+0

no funciona porque el valor dentro de la devolución de llamada es el formulario de texto jquery punto de vista –

1

así .. Esto se hace así:

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    if(typeof(callback)==='function'){ 
    callback.call(this, 'other parameters'); 
    } 
}); 

Los paramenters de devolución de llamada le ayudará a enviar datos a la función de devolución de llamada. ¡ATENCIÓN, no olvide la palabra clave this!

+0

Aparece un error aquí: callback.call no es una función –

+0

entonces ... parece que la devolución de llamada realmente no es una función :) –

1

Dado que usted está pasando una cadena de texto que tendría que eval que:

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     eval(callback); 
    }); 

Editar:

si desea utilizar la llamada() que tendría que hacerlo de esta manera:

function callback() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
} 

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     if(typeof(callback)==='function'){ 
      callback.call(this); 
     } 
    }); 

example('http://example.com/', "#divid", callback); 

Para que la llamada funcione, debe pasar una función y no una cadena. Pero al envolver su expresión jQuery dentro de una función, se ejecutará cuando se llame a la función. Llamar a una función se puede hacer con el método .call().

+1

respondida Hace 3 minutos googletorp 666 ● 10 -> ¡y todos sabemos que eval es malo! – peirix

+0

Funciona, pero ¿hay alguna forma mejor de hacerlo? –

+0

Sí, lea mi comentario http://stackoverflow.com/questions/1153241/send-a-jquery-callback-function-inside-a-variable/1153272#1153272. Solo use call() en lugar de eval() –

Cuestiones relacionadas