非重复jQuery每个行为

时间:2012-12-21 19:32:48

标签: javascript settimeout jquery

奇怪的概念问题。下面的数组包含三个元素。当我运行此代码时,我的意图是脚本等待两秒钟,显示警报,等待两秒钟,显示警报,等待两秒钟,并显示最终警报。相反,它只等待两秒钟,然后重新显示所有三个警报。我已经玩了一段时间,但却无法找到我所缺少的东西。有什么建议?

      $.each(node_array, function(index,value){
        if(value != undefined){
          setTimeout(function(){
            alert("hey")},
          2000)
        }
      });

2 个答案:

答案 0 :(得分:3)

迭代时,设置超时但不要停止迭代。所以所有的setTimeout都是同时启动的。

您需要在用户点击提醒后启动下一个setTimeout

var i=0;
function onestep(){
   alert('hey');
   var value = node_array[i];
   if (++i<node_array.length) setTimeout(onestep, 2000);
}
onestep();

Demonstration

答案 1 :(得分:2)

每次迭代延迟2秒。

$.each(node_array, function(index,value){
    if(value != undefined){
        setTimeout(function(){
            alert("hey");
        },(index+1)*2000)
    }
});

setTimeout是非阻塞的,因此代码将在延迟过去之前继续运行,导致你以相同的延迟同时触发x setTimeout all,所以它们都在同一时间完成。