2012-03-21 1 views
0

Любопытно, если что-то выпрыгивает здесь.Этот блок jQuery создает странный цикл по ошибке

Но когда я запускаю этот блок кода:

$items = $('ul#jobs_to_approve').find('.checked').parents('li'); 
    $items.fadeOut(function(){ 
     $items.find('.checked').removeClass('checked').addClass('unchecked'); 
     $.each($items, function(i, val) { 
     $.post($(val).attr('data-url'), function(data) { 
      $(val).attr('data-url', $(val).attr('data-url').replace('approve','disapprove')); 
     }); 
     }); 
     SSK.quickbooks.check_active_approvals(); 
     $('ul#jobs_to_sync').prepend($items.fadeIn()); 
    }); 
    }, 

Так что, если у меня есть 2 вещи, выбранные для $ пунктов, к тому времени, он получает до конца, он посылает 4 Ajax запросы. Для 3-х элементов он отправляет 9 запросов ajax. Для 4 отправляет 16 запросов AJAX. Есть образец. ;)

Мой вопрос: почему он не придерживается первоначального номера?

+0

можно указать ссылку –

+0

Извините, не на моем местном .. Я просто попытался добавить класс к его экземпляру, а затем удалить его на финише, и он по-прежнему отправляет выбранную площадь элементов. – Trip

+0

это поведенческое поведение iws. Можете ли вы опубликовать его на jsfiddle? –

ответ

4

The docs for .fadeOut say:

Если несколько элементов анимации, важно отметить, что обратный вызов выполняется один раз в совпавшего элемента, а не один раз для анимации в целом.

Вы повторяете все элементы каждый раз, когда обратный вызов запускается для одного элемента. Итак, для n элементов вы делаете n * n запросов. Вам не нужно зацикливаться на обратном вызове ($.each), потому что обратный вызов сам в основном действует как цикл.

Возможно, вы захотите запустить другой код в обратном вызове только один раз.

+0

Blam! Я просто хотел сказать, что Удивительное спасибо !!!! – Trip

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