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请求或事件)。