此代码从页面中获取一些值,比较它们并按下按钮(如果为true),并在循环中执行此操作
在Chrome控制台中运行这个javascript工作一段时间后工作正常,然后运行两次。该脚本适用于编译器,为什么有时在Chrome控制台中执行此操作?有没有办法一次只执行一次代码,而不是取出setInterval
或setTimeout
或者如果我完全需要它们!
setInterval(function() {
var time = document.getElementById("timer").innerHTML;;
if(time>0){
setTimeout(function() {
var x2b = document.getElementById("2x").innerHTML;
var x3b = document.getElementById("3x").innerHTML;
var evt = document.createEvent("MouseEvents");
if (x3b< x2b) {
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var run = document.getElementById("3x");
run.dispatchEvent(evt);}
}, time);}
}, 2000);
答案 0 :(得分:0)
您的代码可能存在问题,而不是Chrome。
#timer
如何更新?如果它的值恰好是2500
,那么setTimeout
将被置于调用堆栈中。然后2000ms后将发生下一个间隔。如果当时#timer
恰好是500
,那么另一个setTimeout
将被置于调用堆栈中。再过500分钟后,两个超时都将被触发,一个接一个。这可能会使超时出现两次。
记录当前时间(Date.now()
)和#timer
的值是有用的,并在超时发生时记录该信息。