2013-02-14 50 views
3

當然,對於jQuery,匿名函數和延遲,我顯然缺少一些基本的東西。帶延遲的jQuery切換類只能工作一次

以下代碼僅在每頁加載時工作一次(它會添加類,然後在1秒後將其刪除,如果再次單擊,它將添加該類,但不會刪除類的持續時間頁面,除非我重新加載頁面):

var jElement = $(currElem); 
jElement.addClass("highlight") 
.delay(1000) 
.queue(function(){ 
$(this).removeClass("highlight"); 
}); 

然而,

,如果我加入(不存在的)函數調用的參數,我把它在我的匿名函數,然後添加/刪除類組合將無限期地工作。

var jElement = $(currElem); 
jElement.addClass("highlight") 
.delay(1000) 
.queue(function(randomFunction){ 
$(this).removeClass("highlight"); 
randomFunction(); //this makes it seemingly 'miraculously' work?? 
}); 

側面說明:

var jElement = $(currElem); 
jElement.addClass("highlight") 
.delay(1000) 
.queue(function(randomFunction){ 
$(this).removeClass("highlight"); 
// this does NOT work; if I dont actually call the 'randomFunction' 
// so that function, even though it does nothing; must somehow cause 
// the implicit call of 'dequeue()' ?? 
}); 
+0

請告訴我們究竟你正在努力實現與上面的代碼。 – Venemo 2013-02-14 20:48:35

+0

我試圖模仿任何不包含有效信息的輸入字段的「臨時突出顯示」。 [用於表單驗證腳本]。 我注意到我的確切代碼工作,不管我傳入的函數是否被命名爲'next'。 有人可以解釋這種行爲嗎?它不足以傳遞函數,您還必須在匿名函數中調用它。我可以看到函數重載可能會導致這種隱式的'dequeue()'行爲,但觸發器本身存在於匿名函數中。 – 2013-02-14 21:11:32

回答

2

randomFunction實際上是被稱爲next和引用.dequeue方法。調用它會導致隊列繼續到隊列中的下一個項目。

http://api.jquery.com/queue/

5

沒有奇蹟出現。這種行爲寫在.queue()的文檔中。

注意與.queue()添加功能時,我們應該確保.dequeue()最終被調用,所以在線上的下一個函數執行。

$('#foo').slideUp().queue(function() { 
    alert('Animation complete.'); 
    $(this).dequeue(); 
}); 

對於jQuery 1.4,這就是所謂的傳遞另一個函數作爲第一個參數的函數。被調用時,這會自動將下一個項目出隊並保持隊列移動。我們使用它,如下所示:

$("#test").queue(function(next) { 
    // Do some stuff... 
    next(); 
}); 
+0

謝謝大家,回覆如此之快。我確實查看了queue()的API,並且在我到達dequeue()和next()的解釋之前,我確實感到非常不知所措。 我很少要求幫助,並且通常會自己找到答案,這要歸功於這樣的網站,但是這一段讓我感到很沮喪,所以我註冊並提問。 我真的很喜歡這個社區,一旦我確信自己已經掌握了jQuery(和其他語言)的基礎知識,我肯定會對此做出貢獻。 – 2013-02-14 21:12:20