2012-10-18 20 views
0

我在這裏有一個循環內動畫的問題。輸出就像應該是我猜,但不是我想要的。循環中的jquery動畫返回相同的索引

for (var i = 0; i < slots.length; i++) { 
    $('#slot-'+i).animate({ 
    marginTop: -10 
    }, 200, function() { 
    console.debug(i); 
    if (i == 0) somefunction(); 
    }); 
} 

問題是,console.debug(i)每次輸出for循環的最後一個索引。

我想要的是:在動畫的完整功能中,我想調用一個函數 - 但只有一次。

回答

3
for (var i = 0; i < slots.length; i++) { 
    $('#slot-' + i).animate({ 
     marginTop: -10 
    }, 200, (function(count) { 
     return function() { 
      console.debug(count); 
      if (count == 0) somefunction(); 
     }; 
    })(i)); 
} 

的這裏的問題是,除非您使用的立即調用函數表達式回報每次迭代相應的成功處理程序,所有的處理程序將把我的相同的值。

+0

這是一個很好的答案,但它的有用的,如果你解釋爲什麼這適用於所有國家的利益。對於未來的用戶來說,只需傾銷已更正的代碼就不太有用 – Jamiec

+0

是啊這個答案很棒..它的工作原理。沒關係,我想它很難描述,但我記住了這個方法。 – ggzone

+0

@Jamiec我已經包含了一個解釋,但在最近的一次談話中,我發現我對範圍的理解有些不對。如果您有深入的解釋或發現我的解釋有任何問題,請在此發佈答案或評論。 –

0

試試這個:

var i = 0; 
for (i=0; i < slots.length; i++) { 
$('#slot-'+i).animate({ 
    marginTop: -10 
    }, 200, function() { 
    console.debug(i); 
    if (i == 0) somefunction(); 
    }); 
} 
+0

你的方法有什麼不同嗎? – VisioN

+0

是的,他設置了第一個變種...我嘗試了但它失敗:(上面的答案工作 – ggzone

+0

我認爲在這種情況下'var i'應該是全局的,然後它可以工作,並且在我的答案中它就像全局變量那樣應該管用。 –