2016-11-30 33 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