2012-03-21 64 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

可以给你一个链接 – 2012-03-21 18:45:54

+0

对不起,它不在我的本地..我只是试图给它的实例添加一个类,然后在完成时删除它,它仍然发送所选项目的Square。 – Trip 2012-03-21 18:46:49

+0

它具有奇怪的行为。你可以把它张贴在jsfiddle上吗? – 2012-03-21 18:47:40

回答

4

The docs for .fadeOut say:

如果多个元素的动画,一定要注意回调每个匹配元素执行一次,没有一次为动画作为一个整体是很重要的。

您正在迭代所有元素,每次为一个元素触发回调。因此,对于n元素,您正在提出n * n请求。您不需要在回调内部循环($.each),因为回调本身基本上充当回路。

您可能只想在回调中运行其他代码一次。

+0

Blam!我只是想说, 。非常感谢! – Trip 2012-03-21 18:53:29