Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不重复jQuery的每个行为_Javascript_Settimeout_Jquery - Fatal编程技术网

Javascript 不重复jQuery的每个行为

Javascript 不重复jQuery的每个行为,javascript,settimeout,jquery,Javascript,Settimeout,Jquery,奇怪的概念问题。下面的数组包含三个元素。当我运行这段代码时,我的意图是脚本等待两秒钟,显示警报,等待两秒钟,显示警报,等待两秒钟,然后显示最终警报。相反,它只需等待两秒钟,然后背靠背显示所有三个警报。我已经玩了一段时间了,但是找不到我缺少的东西。有什么建议吗 $.each(node_array, function(index,value){ if(value != undefined){ setTimeout(function(){

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

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

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

您需要的是在用户单击警报后启动下一个
setTimeout

var i=0;
function onestep(){
   alert('hey');
   var value = node_array[i];
   if (++i<node_array.length) setTimeout(onestep, 2000);
}
onestep();
var i=0;
函数onestep(){
警惕(‘嘿’);
var值=节点_数组[i];

如果(++i每次迭代增加延迟2秒

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

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

这是一个想法,但如果速度不够快,警报之间就不会有延迟。在我看来,这正好说明了警报的原因s不应该用于调试。在这一点上,我当然同意。构建该演示非常痛苦。但是由于用户读取和单击警报而导致的延迟与其他延迟类似(例如ajax请求或事件)。