停止JavaScript间隔

停止JavaScript间隔,javascript,setinterval,Javascript,Setinterval,是否可以停止当前作为setInterval运行的函数 这是我的代码: 这是我正在调用的函数 function pull_light_status (lights_array) { $.getJSON( "resources/php/getjson.php", function( json ) { var vera_obj = json; $.each(lights_array,function(myindex, myvalue){ var

是否可以停止当前作为setInterval运行的函数

这是我的代码:

这是我正在调用的函数

function pull_light_status (lights_array) {
    $.getJSON( "resources/php/getjson.php", function( json ) {
        var vera_obj = json;
        $.each(lights_array,function(myindex, myvalue){
        var id_del_object = myvalue - 1;
        var variable_del_id = vera_obj.devices[id_del_object].states[0].variable;
        var status_del_id;
        if (variable_del_id == "Status"){
            status_del_id = vera_obj.devices[id_del_object].states[0].value;
        }else{
            variable_del_id = vera_obj.devices[id_del_object].states[1].variable;
            status_del_id = vera_obj.devices[id_del_object].states[1].value;    
        }
        if (status_del_id == "1"){
            $("#light"+myvalue).attr("src","resources/img/on_toggle.png");                  
        } else {
            $("#light"+myvalue).attr("src","resources/img/off_toggle.png");  
        }
            console.log("ID: " + myvalue + ">>>>> " + variable_del_id + ">>>>> " + status_del_id);
    })
    })     
}
在主界面上,当我进入“客厅部分”时,我加载html和函数“pull_lights_status”,并设置如下间隔

$("#livingroom").click(function(){
    $(".roomsdbl").hide();
    $(".rooms").hide();
    $("#roomwrapper").css("display","block");
    $("#roomwrapper").load("resources/data/livingroom.html",function() {       


        lights_array = [23,24,25,26];


        //load pull_light_status
        pull_light_status(lights_array);
        setInterval(function(){
            pull_light_status(lights_array);
        },10000);



            $(".closebutton").click(function(){  // Close button
            $("#roomwrapper").hide();
            $(".roomsdbl").show();
            $(".rooms").show();
            }); 
    }) 
}) 
这将每10秒更新我的灯光状态。我遇到的问题是,当我关闭该分区(实际上在使用.closebutton时隐藏)并转到另一个分区时,比如说正在加载相同pull_light_状态函数的主房间,然后每10秒它将去获取两次状态,每次我关闭并打开一个分区,即使是相同的,它将添加另一个设置间隔

当我点击Living rooom上的.Close按钮停止后台运行的pull_light_状态,以及加载房间时正在加载的状态时,我希望看到的情况

我不知道我的解释是否正确。我的编码技术不是很好,所以代码可能会很混乱和重复,我正在学习过程中


亲切问候,

使用
setInterval
后,您可以使用
clearInterval
停止它

var pullInterval = setInterval(fn, 10000);

// some later time ...
clearInterval(pullInterval);

在任何时候,如果希望重新启动间隔,只需再次使用
setInterval

存储
setInterval
调用的结果值,并使用
clearInterval
停止进一步执行间隔。

创建一个全局变量,该变量可以存储计时器引用,然后在closebutton click事件中执行clearInterval

var lightTimer = null; //global variable
 $("#livingroom").click(function() 
 {
    $(".roomsdbl").hide();
    $(".rooms").hide();
    $("#roomwrapper").css("display", "block");
    $("#roomwrapper").load("resources/data/livingroom.html", function() {
        lights_array = [23, 24, 25, 26];


        //load pull_light_status
        pull_light_status(lights_array);
        lightTimer = setInterval(function() {
            pull_light_status(lights_array);
        }, 10000);
    });
}); `
为什么不把“关闭”按钮放在客厅活动之外呢

$(".closebutton").click(function() { // Close button
    $("#roomwrapper").hide();
    $(".roomsdbl").show();
    $(".rooms").show();
    clearInterval(lightTimer); //this will immediately stop your timer
});

搜索
clearInterval
,并将间隔设置为变量名。的可能重复的可能重复您是在尝试停止间隔,还是确实要中断函数执行?(后者我不太确定是否可行)大师,你确定OP也在寻找同样的东西吗?对我来说,这听起来像是在两者之间停止执行。。停止当前作为SetIntervale运行的函数每次加载“房间”时,我调用函数pull_light_status并传递属于该特定房间的灯光id数组。每10秒,它将执行一次getJson以获取最新状态,然后相应地设置图标。假设我首先打开了加载功能的“客厅”。。。。每10秒跑一次。。。。然后当我关上门去“主房间”。。。现在我让函数每10秒运行两次。。。我需要的是,一旦我离开“客厅”停止运行我最初加载的功能,我就会尝试。在bakcGlad之后它做到了!快乐编码!:)