2017-01-18 46 views
-1

我想製作一個GreaseMonkey腳本。我想在我的時間結束時有setTimeout,但我不知道該怎麼做。Javascript settimeout

run(); 
function run(){ 
    var klovas = document.getElementById("light").innerHTML; 
    var btn = document.getElementsByClassName("farm_icon farm_icon_a"); 
    if(klovas < 6){ 
    alert("Kevés egység van"); 
    } else { 
    var i = 0; 
    while (i < btn.length){ 
     if(typeof btn[i] != "undefined"){ 
     btn[i].click(); 
     } 
    i++; 
    setTimeout("run()", 3000); 
    } 
    } 
} 

有了這個代碼,問題是,setTimeout不工作,不等待3秒喜歡它應該。

我試過其他方法,但沒有任何工作。

編輯

function run(){ 
    var klovas = document.getElementById("light").innerHTML; 
    var btn = document.getElementsByClassName("farm_icon farm_icon_a"); 
    if(klovas < 2){ 
    alert("Kevés egység van"); 
    } else { 
    var i = 0; 
    while (i < btn.length){ 
     if(typeof btn[i] != "undefined"){ 
     btn[i].click(); 
     } 
    i++;  
    } 
    } 
} 
setInterval(run, 6000); 

我tryed這一點。它每6秒運行一次,但是我在網站中出現錯誤,我在一秒鐘內點擊了5次以上。所以當我打開頁面時,等待6秒鐘,然後點擊後,我得到錯誤。它不是噴氣式飛機。 :(

回答

0

如果你想讓它只能觸發一次:

function run(){ 
 
    var data = [1,2,3]; 
 
    var i = 0; 
 
    while (i < data.length) { 
 
     console.log(data[i]); 
 
     i++; 
 
    } 
 
} 
 

 
setTimeout(run, 3000);

這就是你現在寫的,它會重複每3秒。

function run(){ 
 
    var data = [1,2,3]; 
 
    var i = 0; 
 
    while (i < data.length) { 
 
     console.log(data[i]); 
 
     i++; 
 
    } 
 
    setTimeout(run, 3000); 
 
} 
 

 
run();

不過的setInterval將達到相同的效果。

function run(){ 
 
    var data = [1,2,3]; 
 
    var i = 0; 
 
    while (i < data.length) { 
 
     console.log(data[i]); 
 
     i++; 
 
    } 
 
} 
 

 
setInterval(run, 3000);

編輯

用戶想看看如果從回調函數內部調用的setInterval會發生什麼。請注意,間隔數每3秒成指數增長。

的setInterval導致函數來運行 3秒,而的setTimeout導致函數在3秒內運行一次

var numberOfIntervals = 0; 
 

 
function run(){ 
 
    setInterval(run, 3000); 
 
    numberOfIntervals++; 
 
    console.log(numberOfIntervals); 
 
} 
 

 
run();

0

這裏還有一些問題。

首先,雖然的setTimeout可以接受函數作爲第一個參數,你想傳遞給函數作爲參數,不執行功能,所以你應該更換。"run()"run

其次,我不知道是什麼原因你遞歸 - 爲什麼setTimeoutrun()而不是把它的運行函數中,儘量把它的底部,並刪除run()電話嗎?在頂部,據我所知,沒有理由說這個代碼需要在所有的時候遞歸。

+0

@Xufox我的錯!我現在編輯它。 – furkle

+0

我需要在i ++之後休息。現在我試着提醒btn [i],當我起牀時,我按下ok,然後運行良好。只是我必須一直按OK。 :D function run(){ var klovas = document.getElementById(「light」)。innerHTML; var btn = document.getElementsByClassName(「farm_icon farm_icon_a」); (klovas <2){ alert(「Not enought light」);其它{ var i = 1; while(i