2017-01-18 51 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