首页 > 解决方案 > 如何修复我的代码在 javascript 中只运行一次

问题描述

var timeToJoin = '18:13';
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes();

var SST = 'https://meet.google.com/rnc-akmx-ubk';

if (time == timeToJoin) {
    joinClass();
}

function joinClass() {
    location.href = SST;
    setTimeout(offMicVideo, 10000);
}

function offMicVideo() {
    var video = document.getElementsByClassName('I5fjHe');
    var mic = document.getElementsByClassName('oTVIqe');

    for (var i = 0; i < video.length; i++) {
        video[i].click();
    }

    for (var i = 0; i < mic.length; i++) {
        mic[i].click();
    }
}

这是一个自动加入会议的分机但是你肯定已经注意到在这种if (time == timeToJoin) {情况下发生的一个小问题是当正确的时间到来时分机尝试加入会议但是根据 if 条件它尝试加入会议每个第二个直到 if 条件匹配。

请给我一些解决方案,让 if 语句中的函数只运行一次

标签: javascript

解决方案


这看起来就像使用另一种机制来确保类只加入一次一样简单。

我的建议是使用一个标志来表示这一点,如下所示:

// Declare hasJoined outside of your looped code
var hasJoined = false;

// Inside your looped code
...
var SST = 'https://meet.google.com/rnc-akmx-ubk';

if (!hasJoined && time == timeToJoin) {
    hasJoined = true;
    joinClass();
}
...

该变量hasJoined必须在监视时间的循环代码之外声明。否则,您将在每次循环运行时覆盖结果。

hasJoined这只需在尝试加入课程之前检查是否为假即可。如果hasJoined还没有设置,是时候加入课程了,hasJoined将设置并joinClass()执行功能。

更改hasJoined为 true 然后防止多次尝试加入课程。


推荐阅读