2010-03-15 94 views
0

示例jquery。假設$ cog是多個項目的緩存選擇器。通過jQuery對象查找最後一個循環

$cog.fadeOut('slow',function(){ 
    alert('hey'); 
}) 

在該示例中,$嵌齒的是4個DOM元素jQuery對象,上述將由一個淡出每個元件出一個,並在回叫(4個警報)每次觸發警報。

我只想在所有4個元素都用它們的fadeOut函數完成時調用alert。

此:

$cog.fadeOut('slow',function(){ 
}) 
alert('hey'); 

運行時將顯示一個警告,那麼$ COG元素消失了(我猜由於與淡出動畫的計時問題)

有沒有一種方式,當調用一個針對jQuery對象中的多個DOM對象的函數來知道它何時完成最後一項?

回答

2

你可以簡單地算回調早在

試試這個:

var remaining=$cog.length; 
$cog.fadeOut('slow',function(){ 
    if((--remaining)==0)alert('hey'); 
}) 
+0

我收到了「剩餘沒有定義」的錯誤在Firebug與那。 – 2010-03-15 23:23:12

+0

正如上面寫的,沒有錯別字?我沒有測試過,但它確實在範圍內並被回調函數捕獲。 – spender 2010-03-15 23:25:28

+0

ack。對不起,錯過了變量聲明。如果陳述的寫法很簡單,我仍然有點模糊。我不能讓那個特定的if語句的工作,但這樣做:\t \t \t \t \t \t \t \t剩餘=剩餘1;如果(剩餘== 0){警報( '嗨');} – 2010-03-15 23:29:04

1

試試這個例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    var items = $("li"); 
    $("#btn").click(function() { 
    (function() { 
     var items = $("li"); 
     items.fadeOut("slow", function() { 
     items = items.not(this); 
     console.log(items.length); 
     if (items.length == 0) { 
      alert("all done"); 
     } 
     }); 
    })(); 
    }); 
}); 
</script> 
<style type="text/css"> 
</style> 
</head> 
<body> 
<input type="button" id="btn" value="Fade Out"> 
<ul> 
    <li>one</li> 
    <li>two</li> 
    <li>three</li> 
</ul> 
</body> 
</html> 
+0

謝謝,cletus。這也是一個好主意! – 2010-03-15 23:30:27