2013-03-10 2 views
0

Я действительно хочу знать, почему важно использовать function(next) и next() в следующем коде. Без next() вы можете удалить класс .open-sidebar один раз после того, как вы его добавили, нажав .header__menu__button--profile.Зачем использовать 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

+0

следующее должно быть определено где-то. – HerrSerker

+0

@HerrSerker это - он находится в списке параметров обратного вызова. – Alnitak

ответ

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.

Смежные вопросы