【问题标题】:Javascript / Toggle / Switch / clearInterval() - not able to clearInterval() when the toggle is switched offJavascript / Toggle / Switch / clearInterval() - 关闭切换时无法 clearInterval()
【发布时间】:2021-05-30 05:30:18
【问题描述】:

哇,这是我的第一篇文章!编程和编码新手,这是我从事的第一个项目。我希望能够使用 setInterval() 切换开关以运行代码或停止它。但是现在我无法在选择切换时将其关闭。尝试了多种方法,例如休息;但到目前为止还没有成功。如果你们中的任何人能指出我正确的方向,那就太好了。

亲切的问候, 劳伦斯

HTML 代码

<card>
<p>Theft Script ON/OFF</p>
<label class="switch">
<input id="executeTheftScript" type="checkbox" > Toggle me
</label>
</card>

Javascript 代码

function theftToggle(){
    var isChecked = document.getElementById("executeTheftScript").checked;
    if (isChecked) {
        var i = setInterval(function(){
            if (person1.credits === 0) {
                clearInterval(i);
                updateStats();
                console.log("You don't have any credits.");
            } else {
                theft();
                person1.credits--;
                updateStats();
            };
        }, 500);
    } else {
        console.log("Your script is stopped.");
    }
}

document.getElementById("executeTheftScript").addEventListener('click', theftToggle);

代码的运行;

【问题讨论】:

  • 您好,您的代码中的 theftToggle() 函数调用在哪里?您能否提供有关“切换”按钮的更多信息?在分析结果问题之前了解变化很重要
  • @sohaieb 感谢您的回复。我添加了更多内容,这些信息是否足够?
  • 劳伦斯你好,不客气,很抱歉我迟到了,我看到你的问题得到了回答。我很高兴^_^

标签: javascript html togglebutton clearinterval ischecked


【解决方案1】:

您需要 addEventListener 输入,最好在函数外部设置 setInterval 变量或使其成为全局变量,这样它就不会创建重复的 setInterval。

var interval;
var person1 = {
  credits: 10
}
 
// listen the input for checked change
document.getElementById("executeTheftScript").addEventListener('change', theftToggle);

function theftToggle() {
  var isChecked = document.getElementById("executeTheftScript").checked;
  if (isChecked) {
    interval = setInterval(function() {
      if (person1.credits === 0) {
        clearInterval(interval);
        updateStats();
        console.log("You don't have any credits.");
      } else {
        theft();
        person1.credits--;
        updateStats();
      }
    }, 500);
  } else {
    clearInterval(interval)
    console.log("Your script is stopped.");
  }
}

function theft() {}

function updateStats() {
  console.log("credits: ", person1.credits);
}
<card>
  <p>Theft Script ON/OFF</p>
  <label class="switch">
    <input id="executeTheftScript" type="checkbox"> Toggle me
  </label>
</card>

【讨论】:

  • 您好 Uingtea,感谢您的回复。我已经尝试了您推荐的更改,但不幸的是它没有成功。我仍然无法关闭脚本,因此循环继续,直到没有剩余积分。
  • 我看到你的问题更新了,但我仍然是 setInterval 变量或 var i = setInterval(... 内部函数,它应该像我的答案一样在外部。
  • 它起作用了,我没有删除我的 document.getElementById("executeTheftScript").addEventListener('click', theftToggle);.. 删除后,它起作用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多