在等待期间取消js

时间:2011-11-28 19:22:58

标签: javascript jquery timeout

我在加载屏幕上有这段代码,在用户登录前等待五秒钟:

  setTimeout(
    function() {
        $.doPost("http://mysite.com", {
                username: results.rows.item(0).username,
                password: results.rows.item(0).password
            });
  }, 5000);

在页面等待的同时,屏幕上还有一个“退出”按钮,如果点击,则需要发布此帖子。基本上,用户在自动登录之前有五秒钟的时间点击注销。注销按钮有一个onClick,无论我在该功能中放置什么,它都会继续登录,如何让该按钮停止$.doPost发生了什么?

4 个答案:

答案 0 :(得分:6)

首先,将超时分配给变量:

var timer = setTimeout(

function () {
    $.doPost("http://mysite.com", {
        username: results.rows.item(0).username,
        password: results.rows.item(0).password
    });
}, 5000);

然后,在您的退出按钮代码中使用clearTimeout()

$('#button').click(function () {
    clearTimeout(timer);
}

请注意变量的范围,因为它在两个单独的函数中使用。在这种情况下,在全局命名空间中声明它可能是一个好主意:

var timer;

$('#login').click(function () {
    timer = setTimeout(

    function () {
        $.doPost("http://mysite.com", {
            username: results.rows.item(0).username,
            password: results.rows.item(0).password
        });
    }, 5000);
});

$('#logout').click(function () {
    clearTimeout(timer);
});

如果您已将这两个事件都放在$(document).ready()中,则可以在其中声明var timer,以阻止任何污染。

答案 1 :(得分:1)

将setTimeout()的返回值保存为“timerHandle”,如果要取消该超时,请在该timerHandle上调用“clearTimeout()”。

答案 2 :(得分:1)

您需要保存setTimeout的结果,并在该结果上调用clearTimeout取消该结果。

答案 3 :(得分:0)

您是否可以使用全局布尔值来检查是否已单击注销按钮?像这样:

setTimeout(
    function() {
        if(!logoutClicked) {
            $.doPost("http://mysite.com", {
                username: results.rows.item(0).username,
                password: results.rows.item(0).password
            });
        }
     }
, 5000);