Javascript 在等待期间取消js

Javascript 在等待期间取消js,javascript,jquery,timeout,Javascript,Jquery,Timeout,我在加载屏幕上有一段代码,在用户登录前等待5秒钟: setTimeout( function() { $.doPost("http://mysite.com", { username: results.rows.item(0).username, password: results.rows.item(0).password }); }, 5000); 当页面等待时,我在屏幕

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

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

当页面等待时,我在屏幕上还有一个按钮,上面写着“注销”,如果点击了,我希望这篇文章不会发生。基本上,用户在自动登录之前有五秒钟的时间点击注销。“注销”按钮有一个onClick,无论我在该函数中输入了什么,它都会继续登录,如何让该按钮阻止发生$.doPost?

首先,将超时指定给一个变量:

var timer = setTimeout(

function () {
    $.doPost("http://mysite.com", {
        username: results.rows.item(0).username,
        password: results.rows.item(0).password
    });
}, 5000);
然后,在注销按钮代码中使用:

但是,要注意变量的作用域,因为它在两个单独的函数中使用。在这种情况下,最好在全局命名空间中声明它:

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来停止任何污染。

首先,将超时指定给一个变量:

var timer = setTimeout(

function () {
    $.doPost("http://mysite.com", {
        username: results.rows.item(0).username,
        password: results.rows.item(0).password
    });
}, 5000);
然后,在注销按钮代码中使用:

但是,要注意变量的作用域,因为它在两个单独的函数中使用。在这种情况下,最好在全局命名空间中声明它:

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来阻止任何污染。

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

将setTimeout的返回值保存为timerHandle,如果你想取消超时,调用该时间的clearTimeout处理。

您需要保存setTimeout的结果并调用该结果的clearTimeout来取消它。

您需要保存setTimeout的结果并调用该结果的clearTimeout来取消它。

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

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

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

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

可能重复的可能重复的可能重复的将计时器保存到一个变量是显而易见的答案-我甚至没有想到这么做XD将计时器保存到一个变量是显而易见的答案-我甚至没有想到这么做XD