Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示确认弹出窗口时,Javascript计时器暂停_Javascript_Timer - Fatal编程技术网

显示确认弹出窗口时,Javascript计时器暂停

显示确认弹出窗口时,Javascript计时器暂停,javascript,timer,Javascript,Timer,我正在尝试创建一个带有预订时间的购物车。剩余时间由php计算。当用户进入请求的页面时,执行的时间是秒的整数,它来自php会话。如果还有3分钟,javascript会启动一个确认框,询问用户是否要重置计时器以继续使用购物车 当显示确认框时,计时器的执行会暂停。如何更改代码,使计时器在不通过确认框暂停的情况下运行 //Starting the Counter in the document.ready-block //remainingSeconds($_SESSION['timer']) is t

我正在尝试创建一个带有预订时间的购物车。剩余时间由php计算。当用户进入请求的页面时,执行的时间是秒的整数,它来自php会话。如果还有3分钟,javascript会启动一个确认框,询问用户是否要重置计时器以继续使用购物车

当显示确认框时,计时器的执行会暂停。如何更改代码,使计时器在不通过确认框暂停的情况下运行

//Starting the Counter in the document.ready-block
//remainingSeconds($_SESSION['timer']) is the time left in seconds (as int)
CountDownTimer('<?php echo remainingSeconds($_SESSION['timer']); ?>', 'reservedTime');
这里是倒计时功能:

// These functions are located in an external .js-file
// Found it on StackOverflow and edited it for my needs
function CountDownTimer(dt, id)
{
    if(id == "kill") {
        clearInterval(timer);
    } else {
        var _second = 1,
            _minute = _second * 60,
            _hour = _minute * 60;

        function showRemaining() {
            var time = dt--,
                minutes,
                seconds;

            if (dt == 180) {
                var extend = confirm("Reset the timer?");
                if (extend) {
                    resetCounter();
                }
            }

            if (dt < 0) {
                clearInterval(timer);
                document.getElementById(id).innerHTML = '00:00';
                alert("No time left.");
                //--redirect for readability removed--
                return;
            }

            if(time > 59) {
                minutes = Math.floor((time % _hour) / _minute);
                seconds = Math.floor((time % _minute) / _second);
            } else {
                minutes = "0";
                seconds = time;
            }

            if(minutes < 10) {minutes = "0"+minutes}
            if(seconds < 10) {seconds = "0"+seconds}
            document.getElementById(id).innerHTML = minutes + ":" + seconds;
        }
        timer = setInterval(showRemaining, 1000);
    }
}


function resetCounter() {
    request = $.ajax({url: "php/ajax.php?f=3"});
    request.done(function (response, textStatus, jqXHR){
        try {
            var data = $.parseJSON(response);
            CountDownTimer('0', 'kill'); // reset old counter
            CountDownTimer(data.time, 'reservedTime'); // start new one
        } catch(e) {
            alert("ERROR ERMAGERD");
            return false;
        }
    });
    request.fail(function (jqXHR, textStatus, errorThrown){
        alert("ERROR");
    });

}
当计时器暂停时,它将创建一个与会话中不同的时间。因此,购物车可能会过期,但用户不会注意到它,并且可能会丢失其保留的项目


编辑:或者有没有更好的/安全的方法将购物车计时器与输出集成到用户,这样就不会有时差?

我认为这是不可能的,因为JavaScript的单线程特性。i、 e当您的警报/确认框被执行时,其他一切都将停止运行,包括您的计时器功能。最好的方法是实现自定义警报/确认框,它通常基于弹出的div/box,这是一个很好的观点。制作了自定义警报-/confirm-div。谢谢!