2013-03-10 49 views
0

我真的很想知道爲什麼在以下代碼中使用function(next)next()很重要。如果沒有next(),您只能通過點擊.header__menu__button--profile刪除類別.open-sidebar。我認爲next()用於選擇元素的以下兄弟!爲什麼使用next()多次添加和刪除類?

爲什麼我需要它刪除類.open-sidebar每當我點擊.sidebar__top__button--close

$('.header').on('click','.header__menu__button--profile',function(){ 
    $('.sidebar').addClass('open-sidebar'); 
}); 

$('.sidebar').on('click','.sidebar__top__button--close',function() { 

    if($('.sidebar').hasClass('open-sidebar')) 
    { 
     $('.sidebar').delay(300).queue(function(next){ 
      $('.sidebar').removeClass('open-sidebar'); 
      next(); 
      });   
    } 

}); 
+0

歡迎使用異步編程。閱讀jQuery的['queue'](http://api.jquery.com/queue/#queue2)和異步編程如何工作。 – DCoder 2013-03-10 12:01:50

+0

接下來必須在某處定義。 – HerrSerker 2013-03-10 12:03:27

+0

@HerrSerker它是 - 它在回調的參數列表中。 – Alnitak 2013-03-10 12:06:55

回答

5

在這種情況下,next參數,是由jQuery的傳遞給.queue回調,這是在動畫隊列中的下一個函數的引用。

.next()沒有任何關係,它是從jQuery集合中選擇下一個兄弟元素的函數。

它內.queue使用,因爲你必須告訴jQuery來處理剩餘的動畫隊列,一旦你做了什麼是你需要做的,即:

.queue(function(next) { 
    // do stuff 
    ... 
    next(); 
}) 

,或者您可以使用.dequeue代替:

.queue(function() { // NB: no parameter 
    // do stuff 
    ... 
    $(this).dequeue(); 
}) 

後者實際上是這樣做的較舊的方式 - next參數的jQuery 1.4,如果引入使用多個隊列避免了重複的隊列名稱中均.queue.dequeue調用。