2012-07-12 151 views
0

我想用Javascript设置会话超时,看起来像警报阻止计时器开始。这里是我的代码: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

回答

1

alert()功能块一切,直到它被驳回。您可以使用称为模式对话框的功能创建您自己的不会阻止的警报样式消息。

jQuery UI的具有this feature.

+0

谢谢。不幸的是,我正在寻找一个弹出窗口,在显示背景内容的同时模拟原生移动行为。我试过jquerymobile对话框,但它似乎占据了整个屏幕..任何想法? – Kiran 2012-07-13 14:37:33

1

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

但是,第二个计时器警报框仍然会显示,直到第一个关闭。

这是因为JavaScript解释器是而不是多线程。但是JavaScript本身是非常异步的,特别是在延时请求中,例如定时器,AJAX和动画。这有时会让人感觉多线程。

确实,在您的代码示例中,第二个计时器按预期启动。当我解散第一个对话框时,假设在出现10秒后立即显示第二个对话框。 尽管如此,它可能是你的问题,它将永远不会显示之前你关闭第一个警报,因为警报是同步呼叫。所以主事件循环直到被解散后才会得到控制权。

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