2009-07-20 14 views
9

mam tę funkcję jQuerywysłać funkcję jQuery oddzwonienia wewnątrz zmiennej

function example(file, targetwidget, callback){ 

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

to działa ok kiedy zrobić:

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

ale chcę wysłać funkcji zwrotnej wewnątrz (callback) zmienna tj .: zamiast przyciskania $ ("# widget_accordion"). accordion ({fillSpace: true}); wewnątrz funkcji zwrotnej Chcę wysłać go:

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

a następnie funkcja musi być coś takiego:

function example(file, targetwidget, callback){ 

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

ale to nie działa

Dzięki z góry za pomoc

+0

Czy próbowałeś oddzwaniania(); ? –

+0

Próbowałem, ale problem polega na tym, że wywołanie zwrotne to: $ ("# widget_accordion"). Accordion ({fillSpace: true}); –

Odpowiedz

19

Aby przekazać wywołanie zwrotne, zmienna musi być funkcją typu. Dowolny z nich powinien działać:

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

, aby dodać do tej wspaniałej odpowiedzi, możesz również dodać do tego sprawdzanie poprawności, sugeruję użycie $ .isFunction() jquery http://api.jquery.com/jQuery.isFunction/) – Eman

2

należy wywołać funkcję wewnątrz oddzwonienia

function example(file, targetwidget, callback){ 

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

ale callback = $ ("# widget_accordion"). Accordion ({fillSpace: true}); Spróbuję tego, –

+0

nadal musisz wywołać funkcję, wywołując ją przy pomocy() – redsquare

+0

zakładając, że callback jest rzeczywiście ważną funkcją! – redsquare

1

To powinno działać:

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

to nie działa, ponieważ wartość wewnątrz oddzwaniania jest tekstem jquery punktu widzenia –

1

dobrze .. to zrobić w ten sposób:

function example(file, targetwidget, callback){ 

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

W paramenters z zwrotnego pozwoli na wysyłanie danych z powrotem do funkcji zwrotnej. UWAGA, nie zapomnij słowa kluczowego this!

+0

Otrzymuję błąd tutaj: callback.call nie jest funkcją –

+0

następnie ... wydaje się, że wywołanie zwrotne naprawdę nie jest funkcją :) –

1

Ponieważ są przechodzącą ciąg tekstowy trzeba by go eval:

function example(file, targetwidget, callback){ 

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

Edit:

jeśli chcesz używać call() trzeba by zrobić to tak:

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); 

Aby połączenie zadziałało, musisz przekazać funkcję, a nie ciąg znaków. Ale zawijanie twojego wyrażenia jQuery wewnątrz funkcji, byłoby uruchamiane, gdy funkcja jest wywoływana. Wywołanie funkcji można wykonać za pomocą metody .call().

+1

odpowiedział 3 minuty temu googletorp 666 ● 10 -> i wszyscy wiemy, że eval to zło! – peirix

+0

Działa, ale czy jest jakiś lepszy sposób to zrobić? –

+0

Tak, przeczytaj mój komentarz http://stackoverflow.com/questions/1153241/send-a-jquery-callback-function-inside-a-variable/1153272#1153272. Wystarczy użyć wywołania() zamiast eval() –

Powiązane problemy