2013-08-27 132 views
0

但是,我有下面的腳本正在工作,我希望每個數組項在循環繼續之前顯示幾秒鐘。這怎麼能在JQuery中完成?在JQuery中延遲For循環

<script> 
$(document).ready(function() { 
    $("#x").click(function() { 
     $.get('testfile.htm', function (data) { 
      var i = 0; 
      var mydata = []; 

      $('#dc').html(data); 

      $('#dc').find('div').each(function() { 
       mydata[i] = $(this).text() 
       i++; 
      }); 

      for (id = 0; id < mydata.length; id++) { 
       $('#res').text(mydata[id]); 
      } 
     }) 
    }); 
}); 
</script> 
+3

你要麼使用循環來設置的'window.setTimeout's負載,或者你不使用循環,但用'window.setTimeout'有點像遞歸。 –

+0

一些建議:在你的循環中將'id'聲明爲'var id = 0',否則你最終會在所有用法中使用一個全局的'id'變量實例。 – doogle

回答

1

東西試試這個:

for (var id = 0; id < mydata.length; id++) { 
    (function (id) { 
     setTimeout(function() { 
      $('#res').text(mydata[id]); 
     }, 3000 * id); // Change 3000 to the delay you want, in ms 
    }(id)); 
} 

實際上,每個setTimeout調用返回瞬間,讓你由3000  毫秒(或左右)增加每個延遲因此每個.text呼叫間隔至少3000  毫秒。

0

使用的setTimeout()

這不是jQuery的,你問,但它能夠完成任務。下面是我爲項目創建的一些代碼示例。

setTimeout(function() { 
      Scroller.Animate("down") 
     }, 10000); 

10000是10秒。

所以,你會想去做

 for(id = 0; id < mydata.length; id++) 
     { 
      setTimeout(function(){ 
       $('#res').text(mydata[id]) 
      }, 5000); 
     } 
+0

我添加了你提供給我的代碼,它沒有做任何事情。我在它之前添加了一個警報,以查看循環是否正在運行。它不喜歡setTimeout() –

+0

你可能會做你的代碼jsfiddle嗎?我可能能夠以更多的方式提供幫助。 – BenM

+0

我只是將警報添加到setTimeout()函數中,它只返回數組中的最後一項 –

3

您可以利用fx隊列和簡單的queue來更新所有文本更改,並在每次更改之間延遲一段時間。這也可以讓你無縫地使用動畫,如fadeOutfadeIn

jQuery的方法:
$.each(mydata, function (i, val) { 
    $('#res').queue(function (n) { 
     $(this).text(val); 
     n(); 
    }).delay(1000); //how many miliseconds between text changes 
    //or with a simple fade in-out effect: 
    //}).fadeIn().delay(1000).fadeOut(); 
}); 
原:
for (id = 0; id < mydata.length; id++) { 
    $('#res').text(mydata[id]); 
}