2011-10-23 19 views
9

Mam funkcję niestandardową i chcę dodać do niej funkcję zwrotną, przejrzałem pozostałe pytania, ale nie mogłem znaleźć odpowiedzi na mój problem. Więc w zasadzie wygląda to tak:Jquery wywoływanie funkcji zwrotnej w funkcji niestandardowej

function myfunction() { 
// something 
} 

I mam inną funkcję, które chcę wywołać jako zwrotnego, w końcu chcę zadzwonić myfunction tak:

myfunction(callback()); 

więc może ktoś proszę powiedzieć mój sposób to zrobić?

Odpowiedz

20

nazwałbyś go tak (przechodzącą funkcji zwrotnej jako argument):

myfunction(myCallbackFn); 

Zauważ, że nie ma nawiasów po nazwie funkcji przechodząc odniesienie do funkcji jako argumentu. To nie wywołuje funkcji, ale po prostu przekazuje odwołanie do niej, które następnie można wywołać później w ramach własnej funkcji.

Można by określić swoją funkcję, a następnie wywołać funkcję zwrotną w nim tak:

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

Uwaga, istnieje wiele metod faktycznie wywołanie funkcji zwrotnej od wewnątrz swojej funkcji niestandardowej. Jeśli wystarczy zadzwonić go normalnie i nie dbają o this argumentu, można po prostu użyć:

cb(); 

Jeśli chcesz ustawić this argument do czegoś, można użyć to:

cb.call(thisArg, arg1, arg2); 

Jeśli chcesz przejść aktualnych argumentów lub przekazać tablicę argumentów i ustawić this argumentu, należy użyć tego:

cb.apply(thisArg, argArray); 

Referencje na temat .call() i .apply().


Twój aktualny kod ma javascript błędu w tym obszarze:

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

To nie jest javascript prawny. Nie wiem, co próbujesz zrobić, ale wygląda na to, że jest to połowa deklaracji funkcji i połowa wywołania funkcji. Jeśli chcesz po prostu wywołać funkcję testową, by po prostu użyć tego:

test(rand_gyumolcs, link, callback); 

Wewnątrz testu, jeśli chcesz funkcję oddzwonienia być nazywany po animacja jest kompletna, to musiałaby zahaczyć zakończenie funkcję animacji i wywołaj wtedy wywołanie zwrotne.

+0

Nie wydaje się, że działa dla mnie jfriend00 ... to prawdopodobnie mój błąd, ale czy mógłbyś rzucić okiem? Kod jest trochę brudny, wiem, nie jestem tak dobry w jquery ... http://ridewithus.co.cc/test/ –

+0

jeśli widzisz .. chcę, aby owoce po prawej stronie się poruszały, i funkcja testowa to robi, ale mam również funkcję zwrotną, która powinna przenieść je z powrotem do pierwotnej pozycji –

+0

Proszę zaksięgować odpowiedni kod w oryginalnym pytaniu lub podać bardzo szczegółowy opis miejsca kodu na stronie i tego, w jaki sposób uruchamia to. Opublikowaliście stronę internetową z pięcioma osadzonymi stronami skryptów i nie mam pojęcia, o jaki kod pytacie. – jfriend00

4

notice Nie odwołuję się do wywołania zwrotnego, ale właśnie przekazuję je jako funkcję odwołania do mojej funkcji. Później go wywołuję W funkcji na końcu lub gdziekolwiek chcesz to zrobić.

+1

@Keith ... trzeba przejść rzeczywistej funkcji, które są potrzebne do uruchomienia gdy deklarujesz myfunction: tj myfunction (function() {alert "cześć";}); nie moja funkcja (oddzwanianie); – bouk

7

Oto przykład z zwrotnego o wartości powrotnej, która jest także biorąc parametry wejściowe:

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; }); 
Powiązane problemy