2011-10-23 125 views
9

我有一個自定義函數,我想向它添加一個回調函數,我查看了其他問題,但我無法真正找到我的問題的答案。所以基本上它看起來像這樣:jquery在自定義函數中調用回調函數

​​

而且我有我想要觸發的回調不同的功能,最終我想打電話給myfunction的是這樣的:

myfunction(callback()); 

因此,誰能告訴我的方式來做到這一點?

回答

20

你會這樣稱呼它(通過回調函數作爲參數)。這不會調用該函數,而只是傳遞一個引用,然後可以在您的自定義函數中稍後調用該引用。

你會定義函數,然後調用回調函數中這樣說:

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

注意,還有的實際上是從您的自定義函數中調用回調函數多種方法。如果你只需要正常調用它,並且不關心this的說法,你可以用:

cb(); 

如果你想設置的this參數的東西,你可以用這個:

cb.call(thisArg, arg1, arg2); 

如果你想沿着當前的參數傳遞或傳遞的參數數組並設置this說法,你這樣做:

cb.apply(thisArg, argArray); 

有關.call().apply()的參考文獻。


您當前的代碼有這方面的JavaScript錯誤:

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

這是不合法的JavaScript。我不知道你在做什麼,但是這看起來像函數聲明的一半,而函數調用的一半。如果你只是想調用的測試功能,你只需使用:

test(rand_gyumolcs, link, callback); 

內部測試,如果你想在回調函數被調用的動畫完成後,那麼你就必須掛鉤完成然後調用回調函數。

+0

似乎不適合我jfriend00 ...這可能是我的錯,但你可以看一下嗎?代碼有點亂,我知道,我不擅長jquery ... http://ridewithus.co.cc/test/ –

+0

如果你能看到..我想要右側的水果移動,和測試功能做到這一點,但我也有一個回調功能,應該將它們移回原來的位置 –

+0

請在您的原始問題中發佈相關代碼,或者給出代碼在您的頁面中的位置以及如何觸發它。你已經發布了一個包含五個嵌入腳本頁面的網頁,我不知道你在問什麼代碼。 – jfriend00

4

通知我沒有調用回調函數,而是將它作爲函數引用傳遞給我的函數。然後我在最後或者你想要的地方調用它。傳遞引用時,函數作爲參數

myfunction(myCallbackFn); 

注意有沒有括號函數名後:

+1

@Keith ......你需要傳遞,你需要在聲明myfunction的運行實際的功能:即myfunction的(function(){alert「hello」;});不myfunction(回調); – bouk

7

這裏是用一個返回值也是以輸入參數的回調的例子:

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