在Chrome控制台中运行javascript有时会运行两次,为什么?

时间:2018-03-19 19:40:48

标签: javascript html

此代码从页面中获取一些值,比较它们并按下按钮(如果为true),并在循环中执行此操作

在Chrome控制台中运行这个javascript工作一段时间后工作正常,然后运行两次。该脚本适用于编译器,为什么有时在Chrome控制台中执行此操作?有没有办法一次只执行一次代码,而不是取出setIntervalsetTimeout或者如果我完全需要它们!

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);

1 个答案:

答案 0 :(得分:0)

您的代码可能存在问题,而不是Chrome。

#timer如何更新?如果它的值恰好是2500,那么setTimeout将被置于调用堆栈中。然后2000ms后将发生下一个间隔。如果当时#timer恰好是500,那么另一个setTimeout将被置于调用堆栈中。再过500分钟后,两个超时都将被触发,一个接一个。这可能会使超时出现两次。

记录当前时间(Date.now())和#timer的值是有用的,并在超时发生时记录该信息。