如何在按钮单击时更新setinterval函数中的变量值

时间:2018-03-28 07:04:24

标签: javascript jquery html

我在我的应用程序中运行一个计时器,它在cookie中存储分钟和秒的值。在某段时间内,弹出窗口会提示一次如果用户在弹出窗口中单击“确定”按钮,则计时器需要重置并再次启动初始值。

function startTimer(duration) {
            var timer = duration,
                minutes, seconds;            
            var seesionIdState = 0;
            setInterval(function() {  
            minutes = parseInt(timer / 60, 10);
            seconds = parseInt(timer % 60, 10);              
                if (seesionIdState == 0) {
                    minutes = minutes < 10 ? "0" + minutes : minutes;
                    seconds = seconds < 10 ? "0" + seconds : seconds;
                    var date = new Date();
                    date.setTime(date.getTime() + (minutes * 60 * 1000));
                    cookie.set("minutes", minutes.toString(), {});
                    cookie.set("seconds", seconds.toString(), {});
                    if (--timer < 0) {
                        timer = 0;
                    }
                    if (minutes == 1 && seconds == 00) {
                        if ($window.innerWidth > 767) {
                            angular.element("#sessionId").modal({
                                backdrop: 'static'
                            });
                            setTimerforPopup();
                        } else {
                            angular.element("#sessionIdMobile").modal({
                                backdrop: 'static'
                            });
                            setTimerforPopup();
                        }

                    } else if (minutes == 00 && seconds == 00) {
                        seesionIdState++;
                    }

                } else {
                    var minutes_data = getCookie("minutes");
                    var seconds_data = getCookie("seconds");
                    if (!minutes_data || !seconds_data) {
                        return;
                    }
                    cookie.remove('minutes');
                    cookie.remove('seconds');
                }

            }, 1000);
        }
startTimer(60);

如果单击确定按钮,我将再次调用函数startTimer(60);。但我遇到的问题是setinterval变量timer没有得到更新,它继续使用旧值。

请帮助我重置并从给定值开始。

1 个答案:

答案 0 :(得分:1)

要重置计时器,您需要停止旧计时器。为此,您需要检索由setInterval函数返回的id,并将其分配给代码中的全局变量。

intervalId = setInterval(function() { ... ]);

然后在startTimer函数的开头添加

if(typeof intervalId != 'undefined'){
    clearInterval(intervalId);
}

或者只是创建附加功能

function resetOrStartTimer(duration){
    if(typeof intervalId != 'undefined'){
         clearInterval(intervalId);
    }
    startTimer(duration);
}