javascript浏览器超时秒计时器

javascript浏览器超时秒计时器,javascript,timeout,alert,Javascript,Timeout,Alert,我正在尝试使用Javascript设置会话超时,看起来警报阻止了计时器的启动。这是我的密码: var first_timer = 2 * 1000; var second_timer = 8 * 1000; var down = -1; function initTimer() { down = setTimeout(processTimeout, first_timer) } function processTimeout() { down = setTimeout(l

我正在尝试使用Javascript设置会话超时,看起来警报阻止了计时器的启动。这是我的密码:

var first_timer = 2 * 1000;
var second_timer = 8 * 1000;
var down = -1;

function initTimer() {
  down = setTimeout(processTimeout, first_timer)
}

function processTimeout() {
        down = setTimeout(logout, second_timer);
        alert ("Timeout of first timer, timerid:" + down );
}

function logout() {
  alert("You are logged out");
  window.location = "http://www.google.com"
}

function clearTimer() {
  if ( -1 != down )
    clearTimeout(down);
  alert("Restarting timer");
  initTimer();
}

initTimer();
当我运行上述命令时,我看到第二个计时器仅在第一个警报解除后启动。即使警报未解除,如何确保第二个计时器在第一次超时后立即启动

Thx

函数
alert()
会阻止其他所有操作,直到它被解除。您可以使用所谓的模式对话框来创建自己的不阻塞的警报样式消息


jQuery UI有

它很可能取决于您使用的浏览器。我没有遇到您描述的最新Firefox的问题

但是,第二个计时器警报框在第一个计时器警报框关闭之前不会显示

这是因为JavaScript解释器不是多线程的。但是JavaScript本身是高度异步的,特别是在长延迟请求(如计时器、AJAX和动画)上。这就是有时给人多线程的感觉

实际上,在您的代码示例中,第二个计时器按预期启动。当我关闭第一个对话框时,比方说,在它出现10秒后,第二个对话框立即显示。 尽管如此,这可能是您的问题,在您解除第一个警报之前,它永远不会显示,因为警报是一个同步调用。这样,主事件循环在被解除之前不会获得控制权


这种情况的一种解决方法是使用Jquery UI提供的“HTML”对话框。

谢谢。不幸的是,我正在寻找一个弹出窗口,模拟本地移动行为,同时显示背景内容。我尝试了jquerymobile对话框,但它似乎占据了整个屏幕。。有什么想法吗?