2014-03-12 64 views
0

使用下面的代碼作爲示例,我想將值'i'傳遞給回調函數,以便它將從正確的div中移除類。目前,這只是把我看作是循環中的最後一個價值。將循環計數值傳遞給JQuery SlideUp回調

for(i=0;i<tablelength;i++){ 
    if($('#detailsdiv'+i).is(':visible')){ 
     $('#anotherdiv'+i).slideUp('slow',function(){ 
     $('#div'+i).removeClass('open'); 
    }); 
} 
+1

我並不是很瞭解這個問題。 – Peter

+0

我都沒有...... – Ani

回答

2

爲什麼發生這種情況的原因很簡單:它需要時間上滑函數返回前,回調被調用。鑑於此事實,這種類型的函數調用是非阻塞的,因爲循環將快速到達最後一個值,所有回調將引用最後一個值i

試試這個:

for (index=0; index < tablelength; index++) { 
    (function(i) { 
     if ($('#detailsdiv' + i).is(':visible')) { 
      $('#anotherdiv' + i).slideUp('slow', function() { 
       $('#div' + i).removeClass('open'); 
      }); 
     } 
    })(index); 
} 

通過這種方式,我們創建了立即以新的範疇,將托起我們的變量調用的函數。使用我們的for循環迭代器index param調用每個函數,並使用其中的i變量。

+0

工作完美,非常感謝! – TheBritishBloke

1

你需要做的是這樣:

for(i=0;i<tablelength;i++){ 
    if($('#detailsdiv'+i).is(':visible')){ 
     (function(i){ 
      $('#anotherdiv'+i).slideUp('slow',function(){ 
      $('#div'+i).removeClass('open'); 
     })(i); 
    }); 
} 

這是由於這樣的事實,「我」你在回調效果基本show使用將指向同一個變量中的所有slideups的用於循環調用。這個「我」當然會在循環執行後得到最後一次迭代的值。

使用這樣的IIFE(立即調用的函數表達式)將捕獲設置回調時「i」的值。

+0

你的工作也很完美!謝謝! – TheBritishBloke