2012-04-26 137 views
1

這最好通過代碼示例來解釋,因此任何人都可以解釋爲什麼(以技術術語)傳遞給測試的匿名函數在jQuery之後沒有被調用隱藏事件?jQuery - 使用匿名函數作爲函數參數傳遞爲jQuery回調函數

UPDATE:對於這個例子來說這不是真正重要的,但是爲了清楚起見,讓我們說測試函數在全局範圍內,這是一個錨元素。

test(this, function() { 
    alert('Called by anonymous function!'); 
}); 

function test(object, callback) { 
    $(object).hide('slow', callback); 
} 

更改:

$(object).hide('slow', callback); 

要:

$(object).hide('slow', callback()); 

作品。這是因爲回調不是當前上下文或全局窗口對象中的命名函數嗎?

+0

您需要提供更多的代碼,尤其是什麼 '這' 是。除此之外,手動執行處理程序是錯誤的。 – Bergi 2012-04-26 06:44:38

+0

你在'test()'調用中缺少一個'''' – Joseph 2012-04-26 06:47:37

+0

這是什麼並不重要。但是爲了參數的緣故,測試函數在全局範圍內,這是指一個錨元素。爲什麼使用callback()執行hander錯誤?如果僅僅將對匿名函數的引用作爲jQuery .hide()的回調函數傳遞,它就不會被執行。 – Matt 2012-04-27 02:54:30

回答

0

這是正確的做法。

http://jsfiddle.net/6dFm6/6/

調用隱藏動畫後刪除將刪除對象,並導致動畫回調沒有被調用。

它在jsfiddle.net/6dFm6/1中工作的原因是因爲回調是在運行時執行的,並且在回調事件中傳遞和調用該值。

請參閱這些文章,瞭解'functionName()'作爲回調返回的內容的不同級別。看起來'未定義'是由調用返回的,但是執行仍然在正確的時間發生。

When to use() after a callback function name?

In JavaScript, does it make a difference if I call a function with parentheses?

Callback function - use of parentheses

do I need parenthesis when using a named function as an jquery ajax success callback

javascript syntax: function calls and using parenthesis

1

您的代碼應該看起來更像這個

test(this, function() {...}); 

你沒有調用代碼匿名函數,但我不知道是什麼語法實際上做

檢查出這個小提琴一個工作示例http://jsfiddle.net/L4NxD/2

編輯,對小提琴進行更多編輯以更好地複製原始代碼。使用http://jsfiddle.net/L4NxD/1http://jsfiddle.net/L4NxD/來獲得更早的版本。

+0

目前看着這個 – Matt 2012-04-27 04:49:57

+0

這與我的代碼沒有什麼不同,除了你用javscript選擇器代替了它。這讓我覺得這個對象被傳入時有錯誤。感謝演示。問題被認爲縮小了。在接受之前會運行一些測試。 – Matt 2012-04-27 05:01:10

+0

請參閱http://jsfiddle.net/6dFm6以獲取完整的代碼示例,以及http://jsfiddle.net/6dFm6/1/使用callback()調用回調。第一個不行,第二個不行。 – Matt 2012-04-27 05:10:33