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

pkln4tw6  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(164)

这段代码从一个页面中获取一些值,比较它们,如果为true,就按下一个按钮,这是在一个循环中完成的
在chrome控制台中运行这段JavaScript可以正常运行一段时间,然后运行两次。脚本在编译器上运行良好,那么为什么它有时会在Chrome控制台上运行呢?有没有一种方法可以一直只执行一次代码,而不需要取出setIntervalsetTimeout或if,因为我绝对需要它们!

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

字符串

8hhllhi2

8hhllhi21#

可能是你的代码有问题,而不是Chrome。
#timer如何更新?如果它的值恰好是类似2500的值,那么setTimeout将被放置在调用堆栈中。然后2000ms之后,下一个间隔将发生。如果#timer恰好是类似于500的东西,那么另一个setTimeout将被放置在调用堆栈上。再过500ms后,两个超时将相继触发。这可能会使超时出现两次。
记录当前时间(Date.now())和#timer的值,并在超时发生时记录该信息将很有帮助。

相关问题