2013-07-19 72 views
4

如何在不使用任何插件的情況下在普通jQuery中編寫sessionTimeOut功能?我想使用我自己的警報ui.To找出我可以編寫的任何UI活動,但不知道如何將它結合到超時功能中。在普通jQuery中的會話超時

$('*').on('click', function() { 
    console.log('click', this); 

}); 

$('*').on('change', function() { 
    console.log('change', this); 
}); 
+0

有你想重新發明車輪的特殊原因?那裏有很多高質量的會話超時jQuery插件。 – jbabey

+0

它不適用於動態添加到頁面的元素。甚至不會提及它會在DOM中添加很多**處理程序 – zerkms

+0

您可以查看現有解決方案的來源,並重新編寫它們以滿足您自己的需求,我猜...如果您喜歡重新發明輪子和東西.. –

回答

6

你可以在所有現代瀏覽器捕捉鼠標移動事件:

(function() { 
    var timeoutSession; 
    document.addEventListener('mousemove', function (e) { 
     clearTimeout(timeoutSession); 
     timeoutSession = setTimeout(function() { 
      alert('Make SESSION expire'); 
      //call a script here to server... 
     }, 30000); //30s 
    }, true); 
})(); 
+0

是不是mousemove會有點過分?否則一個好的解決方案 – musefan

+0

@musefan肯定它是過度的解決方案,但唯一我能想到的將是完全相關的。使用點擊可能會更好,因爲無論如何我們不關心傳播是否已停止。 –

+0

工作絕對好。謝謝。 –

0

基於烤的答案,但使用AJAX調用作爲定時器復位動作,而不是mousemoves:

(function (delay) { 

    function getTimeout() { 
     return setTimeout(function() { 
      console.log('Make SESSION expire'); 
      //call a script here to server... 
     }, delay); 
    }; 

    // start the session timer 
    var timeoutSession = getTimeout(); 

    $(document).ajaxSend(function() { 
     // this event fires any time an ajax call is sent 
     console.log('timeout reset'); 
     clearTimeout(timeoutSession); 
     timeoutSession = getTimeout(); 
    }); 
})(30000); // <--- notice that you put the timeout delay here