我已经尝试了几十种不同的解决方案来解决这个问题。基本上我已经构建了一个包含大量ID的数组,我使用javascript循环遍历它们并打开经过归档过程的页面。这些需要延迟,因为每一个发生需要大约一分钟。这就是我目前所拥有的:
var i = 0
function openPage() {
while (i < Array.length) {
window.setTimeout(go(i), 60000*i;);
i++;
}
}
function go(i) {
window.open('http://localhost:12575/DD7RO2.aspx?id=' + Array[i][0]);
}
然后我按下按钮打开openPage。
由于某种原因,这会在window.setTimeout行抛出“无效参数”错误。我似乎无法弄清楚为什么会这样。我尝试过的每一次迭代都要么打开一个窗口(数组中的第一个)并停止,要么完全打开所有内容而忽略超时。我觉得这个实际上可能有用,因为它实际上做了不同的事情。任何帮助将不胜感激。
答案 0 :(得分:3)
当作为参数传递时,您正在评估go(i)
。该函数在循环中执行。相反,您应该返回一个函数对象,并在计时器触发时执行。
不要做function(){go(i);}
,这是一个经典的关闭错误。每次事件触发时,您最终都会调用函数go(i)
,但最终值为i
。 i
的范围是封闭函数,因此在超时运行时它的值为Array.length - 1
。
取而代之的是
window.setTimeout((function (j){return function(j){go(j)}})(i), 60000*i;);
拼写出来;
(
function (j) {
var k = j;
return function() {
go(k)
}
}
)(i);
这看起来令人困惑,但这就是JS的工作方式。
i
的函数。 i
的值绑定在该时间点。 i
正确绑定。答案 1 :(得分:0)
window.setTimeout(function(){ go(i); }, 60000*i;);
你走了!