等待

2011-11-28 83 views
1

我有一个加载屏幕,等待五秒钟登录用户之前,此位的代码中取消JS:等待

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

当页面正在等待,我也有,说在屏幕上的按钮'注销',如果点击,需要这篇文章不会发生。基本上,用户有五秒钟注销前自动打正登陆,注销按钮有一个onClick不管什么我把这个函数,它会继续与登录,我怎么能有一个按钮,阻止发生的$.doPost

+0

[与setTimeout的运行停止功能]的可能重复(http://stackoverflow.com/questions/5786646/stop-function-that-run-with-settimeout) –

+1

我想你意思是'$ .post'。 – SLaks

回答

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

保存的setTimeout()的返回值是“timerHandle”,如果你想取消超时,称之为“clearTimeout()”中就指出timerHandle。

1

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

0

您可以使用全局布尔检查,如果注销按钮被点击?事情是这样的:

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

保存定时器变量是显而易见的答案 - 我根本就没想到这样做XD – bfink