等待

2011-11-28 116 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