Javascript-带数组的循环问题

Javascript-带数组的循环问题,javascript,arrays,loops,iframe,Javascript,Arrays,Loops,Iframe,我有以下代码,当工作正常时,应该在iframe中打开链接1,等待3秒,然后在iframe中打开链接2,等待3秒,等等 当前它直接跳到数组中的最后一个值(最后一个链接) 有JS专家吗 <html> <head></head> <body> <a href="http://www.google.com">Google</a><br /> <a href="http://www.thinkgeek.c

我有以下代码,当工作正常时,应该在iframe中打开链接1,等待3秒,然后在iframe中打开链接2,等待3秒,等等

当前它直接跳到数组中的最后一个值(最后一个链接)

有JS专家吗

 <html>
 <head></head>
 <body>

 <a href="http://www.google.com">Google</a><br />
 <a href="http://www.thinkgeek.com">ThinkGeek</a><br />
 <a href="http://www.themetapicture.com">The Meta Picture</a>

 <iframe src="http://www.google.com" id="myid" name="main" width="1024" height="768">
 </iframe>

 <script>
 function getLinksArray() {
     for (var i = 0; i < document.links.length; i++) {
         var linx = document.links[i].href;

         // create a closure for each loop iteration
         (function(linx) {
           setTimeout(function() {
             openLinks(linx);
           }, 3000);
         }(linx));

     }
 }

 function openLinks(link) {
 document.getElementById("myid").src = link;
 }

 window.onload = getLinksArray();
 </script>
 </body>
 </html>



函数getLinksArray(){ 对于(var i=0;i
您可能需要
3000*i
作为延迟,否则所有延迟都将在3000毫秒(3秒)后执行。由于它们是连续执行的,最后一个是被注意到的

// ...
setTimeout(function(){
  // ...
}, 3000 * i);
// ...

您可能需要
3000*i
作为延迟,否则所有延迟都将在3000毫秒(3秒)后执行。由于它们是连续执行的,最后一个是被注意到的

// ...
setTimeout(function(){
  // ...
}, 3000 * i);
// ...

您可能只想让迭代本身计时:

function loadLink(i) {
    document.getElementById("myid").src = document.links[i].href;
    if (i < document.links.length) {
        window.setTimeout(function() { loadLink(i+1) }, 3000);
    }
}

window.onload = loadLink(0);
函数加载链接(i){
document.getElementById(“myid”).src=document.links[i].href;
if(i
您可能只想让迭代本身计时:

function loadLink(i) {
    document.getElementById("myid").src = document.links[i].href;
    if (i < document.links.length) {
        window.setTimeout(function() { loadLink(i+1) }, 3000);
    }
}

window.onload = loadLink(0);
函数加载链接(i){
document.getElementById(“myid”).src=document.links[i].href;
if(i
我很确定这样的事情应该可以奏效,而不会造成越来越长的延迟。不过,还没有对两者进行性能测试,所以不能说哪一个是最好的-只是想确保您知道另一个选项

var linx = document.links;
(function loadLink(i) {          
    setTimeout(function () {   
        document.getElementById("myid").src = linx[i].href;
        if(linx[++i])
        {
            loadLink(i);
        }
    }, 3000)
})(0);

我很确定这样的事情应该会奏效,不会造成越来越长的延迟。不过,还没有对两者进行性能测试,所以不能说哪一个是最好的-只是想确保您知道另一个选项

var linx = document.links;
(function loadLink(i) {          
    setTimeout(function () {   
        document.getElementById("myid").src = linx[i].href;
        if(linx[++i])
        {
            loadLink(i);
        }
    }, 3000)
})(0);

循环将创建超快速的超时,因此第一个将等待3秒,而第三个将延迟毫秒。打开的链接将创建下一个超时。所有事件将在三秒内停止-将3000乘以当前迭代计数。循环将创建超快速的超时,因此第一个将等待3秒,而第三个将延迟毫秒。打开的链接应该会创建下一个超时。你所有的事件都会在三秒内发生-用当前的迭代次数乘以3000。哈哈,在写我的答案时太分心了,有人在我之前发布了一个非常类似的答案。。啊,好吧,还是不同的方法!哈哈,在写我的答案时分心了,有人在我前面贴了一个非常类似的答案。。啊,好吧,还是不同的方法!