2016-11-30 58 views
1

我已经在列表中打开网址下面的脚本:如何添加延迟到HTML的JavaScript函数

function openWindow(){ 
    var x = document.getElementById('a').value.split('\n'); 
    for (var i = 0; i < x.length; i++) 
     if (x[i].indexOf('.') > 0) 
      if (x[i].indexOf('://') < 0) 
       window.open('http://'+x[i]); 
      else 
       window.open(x[i]); 
} 

不过,我想补充的延迟(假设约5秒),打开每个网页地址。我怎样才能做到这一点?

我对函数不熟悉。通常用Linux等更好。非常感谢您的洞察力。

回答

1

一个更好的办法是使用setTimeout()连同self-executing anonymous function

function openWindow() { 
    var i = 0; 
    var x = document.getElementById('a').value.split('\n'); 
    (function() { 
     if(typeof x[i] !== 'undefined') { 
      if(x[i].indexOf('.') > 0) { 
       if(x[i].indexOf('://') < 0) { 
        window.open('http://' + x[i++]); 
       } else { 
        window.open(x[i++]); 
       } 
      } 
      setTimeout(arguments.callee, 1000); 
     } 
     return false; 
    })(); 
} 

这将保证在您的代码执行之前不会进行下一次调用。在本例中我使用arguments.callee作为函数参考。一旦索引不再存在于数组中,通过检查它是否未定义,它只是返回false而不是设置另一个timout。

-1
setInterval(function(){window.open('http://'+x[i]);},5000); 
+0

我在哪里添加这个功能? – DomainsFeatured

+0

'window.open('http://'+ x [i]);'而不是 – Mahi

+2

,但这不起作用。 for循环将导致问题 – Mahi

0

创建的所有URL的

var x = [url1, url2, url3, ...]; 

阵列X创建一个for循环

for(var i = 0; i<x.length; i++) { 
    setTimeout(function() { 
    window.open('http://'+x[i])}, 1000); // 1000 for 1 second 
} 
} 
+0

setInterval,而不是setTime out也可以工作... –

+0

这将无法正常工作,所有的超时会一起触发 – xShirase

+0

如果您增加每个url之间的持续时间,例如 –

1

你可以像这样做,以避免因setTimeout的是无阻塞的问题。

你需要的是在开始下一次迭代之前等待setTimeout被执行。

var i = 0; 
function openWindow(){ 
    var x = document.getElementById('a').value.split('\n'); 
    doLoop(x); 
} 


function doLoop(x) 
    setTimeout(function() { 
     if (x[i].indexOf('.') > 0){ 
      if (x[i].indexOf('://') < 0){ 
       window.open('http://'+x[i]); 
      }else{ 
       window.open(x[i]); 
      } 
     } 
     i+=1; 
     if(i<x.length){ 
      doLoop(x); 
     } 
    }, 5000) 
} 

使用自执行功能,它会是这样的:

function openWindow() { 
    var i = 0; 
    var x = document.getElementById('a').value.split('\n'); 
    (function fn() { 
     if(x[i].indexOf('.') > 0) { 
      if(x[i].indexOf('://') < 0) { 
       window.open('http://' + x[i++]); 
      } else { 
       window.open(x[i++]); 
      } 
     } 
     i++; 
     if(i < x.length){ 
      setTimeout(fn, 3000); 
     } 
    })(); 
} 
+0

尝试过,但似乎无法让它与这一个工作。 – DomainsFeatured

+0

它有什么问题? – xShirase