Javascript 如何清理之前设置的间隔?

Javascript 如何清理之前设置的间隔?,javascript,jquery,select,audio,timer,Javascript,Jquery,Select,Audio,Timer,我有以下代码: ('#hometrainerSelectIntervall').on('change', function() { // function to change intervall function changeIntervall() { elemIntervall.innerHTML = textIntervall[counterIntervall]; counterIntervall++; if (cou

我有以下代码:

('#hometrainerSelectIntervall').on('change', function() {

      // function to change intervall
      function changeIntervall() {
        elemIntervall.innerHTML = textIntervall[counterIntervall];
        counterIntervall++;
        if (counterIntervall >= textIntervall.length) {
          counterIntervall = 0;
        }
      }

      // set the time to change intervall from input-data
      var time = parseInt($(this).find(":selected").data("time")) * 60 * 1000;

      if (this.value == 'timeWarmingUp')
      {

        // show/hide the corresponding boxes
        $(".hometrainerIntervallMuscleAndRestday, .hometrainerIntervallBoxing").hide(100);
        $(".hometrainerIntervallWarmingUp").delay(150).show(100);

        // loop/set the sound
        loop = setInterval(function(){$.playSound("/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3")}, time);

        // define the text for the intervalls
        var textIntervall = ["<i class='fas fa-chevron-circle-up'></i> STUFE 2 <i class='fas fa-chevron-circle-up'></i> ", "<i class='fas fa-chevron-circle-down'></i> STUFE 1 <i class='fas fa-chevron-circle-down'></i>"];

        var counterIntervall = 0;
        var elemIntervall = document.getElementById("intervallWarmingUp");
        var instIntervall = setInterval(changeIntervall, time);

      }

      else if (this.value == 'timeMuscleAndRestday')
      {

        // show/hide the corresponding boxes
        $(".hometrainerIntervallWarmingUp, .hometrainerIntervallBoxing").hide(100);
        $(".hometrainerIntervallMuscleAndRestday").delay(150).show(100);

        // loop/set the sound
        loop = setInterval(function(){$.playSound("/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3")}, time);

        // define the text for the intervalls
        var textIntervall = ["<i class='fas fa-chevron-circle-up'></i> STUFE 3 <i class='fas fa-chevron-circle-up'></i> ", "<i class='fas fa-chevron-circle-down'></i> STUFE 2 <i class='fas fa-chevron-circle-down'></i>"];

        var counterIntervall = 0;
        var elemIntervall = document.getElementById("intervallMuscleAndRestday");
        var instIntervall = setInterval(changeIntervall, time);

      }

      else if (this.value == 'timeBoxing')
      {

        // show/hide the corresponding boxes
        $(".hometrainerIntervallWarmingUp, .hometrainerIntervallMuscleAndRestday").hide(100);
        $(".hometrainerIntervallBoxing").delay(150).show(100);

        // loop/set the sound
        loop = setInterval(function(){$.playSound("/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3")}, time);

        // define the text for the intervalls
        var textIntervall = ["<i class='fas fa-chevron-circle-up'></i> STUFE 2 <i class='fas fa-chevron-circle-up'></i> ", "<i class='fas fa-chevron-circle-down'></i> STUFE 1 <i class='fas fa-chevron-circle-down'></i>"];

        var counterIntervall = 0;
        var elemIntervall = document.getElementById("intervallBoxing");
        var instIntervall = setInterval(changeIntervall, time);

      }else{

        // hide all corresponding boxes
        $(".hometrainerIntervallWarmingUp, .hometrainerIntervallMuscleAndRestday, .hometrainerIntervallBoxing").hide(100);

        // clear all intervalls
        clearInterval(loop);
        clearInterval(instIntervall);

      }
});
('hometrainerselectinterval')。关于('change',function()){
//更改间隔的函数
函数changeIntervall(){
elemIntervall.innerHTML=textIntervall[counterIntervall];
反interval++;
if(计数器间隔>=文本间隔长度){
反间隔=0;
}
}
//设置从输入数据更改间隔的时间
var time=parseInt($(this).find(“:selected”).data(“time”))*60*1000;
如果(this.value=='timeWarmingUp')
{
//显示/隐藏相应的框
$(“.hometrainerIntervallMuscleAndRestday,.HomeTrainerIntervallBox”).hide(100);
美元(“.hometrainernertvallwarmingup”)。延迟(150)。显示(100);
//循环/设置声音
loop=setInterval(函数(){$.playSound(“/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3”)},时间);
//定义间隔的文本
var textIntervall=[“STUFE 2”,“STUFE 1”];
var反间隔=0;
var eleminterval=document.getElementById(“intervallWarmingUp”);
var InstitInterval=设置间隔(ChangeInterval,时间);
}
else if(this.value='timeMuscleAndRestday')
{
//显示/隐藏相应的框
$(.hometrainerIntervallWarmingUp.HomeTrainerIntervallBox”).hide(100);
$(“.hometrainerIntervallMuscleAndRestday”)。延迟(150)。显示(100);
//循环/设置声音
loop=setInterval(函数(){$.playSound(“/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3”)},时间);
//定义间隔的文本
var textIntervall=[“STUFE 3”、“STUFE 2”];
var反间隔=0;
var eleminterval=document.getElementById(“intervallMuscleAndRestday”);
var InstitInterval=设置间隔(ChangeInterval,时间);
}
else if(this.value=='timeBoxing')
{
//显示/隐藏相应的框
$(.hometrainerIntervallWarmingUp.hometrainerIntervallMuscleAndRestday”).hide(100);
$(“.hometrainerIntervallBoxing”)。延迟(150)。显示(100);
//循环/设置声音
loop=setInterval(函数(){$.playSound(“/BETA/includes/boxing/sounds/BELL_HOMETRAINER.mp3”)},时间);
//定义间隔的文本
var textIntervall=[“STUFE 2”,“STUFE 1”];
var反间隔=0;
var elemIntervall=document.getElementById(“IntervallBox”);
var InstitInterval=设置间隔(ChangeInterval,时间);
}否则{
//隐藏所有对应的框
$(“.hometrainerIntervallWarmingUp,.hometrainerIntervallMuscleAndRestday,.hometrainerIntervallBoxing”)。隐藏(100);
//清除所有间隔
清除间隔(循环);
clearInterval(Instinevall);
}
});
一旦再次发生onchange,我如何清除选择所选的间隔

也许还可以以某种方式优化代码我不是jquery/javascript专家(但它可以工作):D

对于当前代码,上一个间隔仍然运行


提前谢谢。

请您将
clearInterval
代码放入
try catch
块中,并记录错误,如果没有错误,则任何操作都有效,但在不同的部分中,更改后仍会运行上一设置的间隔:)取决于您声明的位置,
loop
变量可能超出范围,无法访问
clearTimeout
它是我要在更改时清除的“loop”和“institerval”