运行 满足条件时使用 setInterval 和 clearInterval 的函数?

Running a function using setInterval and clearInterval when conditions are met?

我不确定这是否是执行此操作的最佳方法,或者即使我这样做是对的。我有一个可以打开和关闭的拨动开关,所以当它打开时,它会偶尔运行 autoAdmit() 函数,当它关闭时,它不应该是 运行 它。我应该怎么做?我不知道最好的方法是什么,所以我尝试了可能是最愚蠢的方法..

function autoAdmit() {
    for (let element of document.getElementsByTagName('span')) {
        if (element.innerHTML === 'Admit') {
            element.click();
            }
        }
        
  
      
} 


document.addEventListener('DOMContentLoaded', function() {
    var checkbox = document.querySelector('#auto-admit .mdc-switch__native-control');

    function isChecked() {
      if (checkbox.checked) {
        
        clearInterval(autoAdmit)
        setInterval(autoAdmit, 1000)

      } else {
    
        clearInterval(autoAdmit)
        setInterval(autoAdmit, 10000000000000)
        
      }
    }
    checkbox.addEventListener('change', function() {
      isChecked();
    });
  }

);

1.the return setInterval 的值是一个数字(interval Id),当你想清除Interval 时,params 应该是interval Id。

2.if你不要autoAdmit,clearInterval就好了,不用setInterval很长的时间

3.i 不要像我认为的那样替换您的 autoAdmit 函数,不需要每次都为 'Admit' 元素查询选择(这不是什么大问题)。

let clickIntervalId = null;

function autoAdmit() {
    for (let element of document.getElementsByTagName('span')) {
        if (element.innerHTML === 'Admit') {
            element.click();
        }
    }      
} 

document.addEventListener('DOMContentLoaded', function() {
    var checkbox = document.querySelector('#auto-admit .mdc-switch__native-control');
    function isChecked() {
      if (checkbox.checked) {
        if(clickIntervalId) clearInterval(clickIntervalId);
        clickIntervalId = setInterval(autoAdmit, 1000);
      } else {
        clearInterval(clickIntervalId);
      }
    }
    checkbox.addEventListener('change', function() {
      isChecked();
    });
  }
);
var timer = null

function autoAdmit() {
    for (let element of document.getElementsByTagName('span')) {
        if (element.innerHTML === 'Admit') element.click();
    }
} 

document.addEventListener('DOMContentLoaded', function() {
    let checkbox = document.querySelector('#auto-admit .mdc-switch__native-control')
    checkbox.addEventListener('change', function(event) {
        clearInterval(timer)
        if(event.target.checked){
            timer = setInterval(autoAdmit, 1000)
        }
    });
});