2012-05-20 172 views
0

我正在嘗試編寫一個jQuery腳本,用於檢查用戶是否在最後一分鐘內點擊過,滾動過或點擊過某個鍵。如果是這樣,它應該在下一個時間間隔(1分鐘)顯示警報。如果不是,只要該頁面已在1小時內加載,它將每隔1分鐘顯示一次警報。jQuery保持活動狀態與動作

這看起來應該可以工作,但事實並非如此。任何想法:

$(function() { 

     var initialPageLoad = new Date().getTime(); 
     var lastSiteAction = 0; 
     var checkInterval = setInterval(function(){ 
      if(Date().getTime() - lastSiteAction > 60000){ 
       if(Date().getTime() - initialPageLoad > 3601000){ 
        clearInterval(checkInterval); 
       }else{ 
        alert('Tried to checkin! You have not done anything in the last minute.'); 
       } 
      }else{ 
       alert('Tried to checkin! You have done something in the last minute.') 
      } 
     }, 60000); // 1 mins * 60 * 1000 

     $(document).keydown(function(){ 
      lastSiteAction = new Date().getTime(); 
     }); 
     $(document).scroll(function(){ 
      lastSiteAction = new Date().getTime(); 
     }); 
     $(document).mousedown(function(){ 
      lastSiteAction = new Date().getTime(); 
     }); 

     alert('loaded!'); 
    }); 
+0

你爲什麼要1小時(無論任何互動)後清零間隔檢查? – Grezzo

+0

由於網站會話在一個小時後過期,我不需要繼續檢查它們是否處於活動狀態。 – WhiskeyMike

回答

0

你的代碼似乎有缺陷在許多方面,這不僅是因爲要檢查每分鐘,如果用戶交互。考慮到用戶在檢查前1秒鐘進行了交互。第一次檢查(用戶交互後59秒)不做任何事,然後在1:59進行第二次檢查顯示警報。用戶一直無所作爲近兩分鐘,而不是1

這個怎麼樣作爲一個解決方案:http://jsfiddle.net/xAzNN/5/

+0

這實際上是一個非常好的代碼,並幫助我與另一個問題感謝Grezzo。 我應該提到以下內容: - 此代碼僅在用戶登錄時運行 - 代替警報,最終代碼將ping一個更新數據庫「last_activity」字段的文件。 ..因此,我需要按照設定的時間間隔來完成,而不是僅在用戶實際處於非活動狀態時才執行。 – WhiskeyMike

+0

經過一些修改後,我確實已經有計時器成功工作了。現在我的問題是$ .get,似乎不起作用。我也嘗試過.ajax,DID可以工作,但是每秒都會在一個無限循環中ping文件,這是我不想要的.'code' $ .get(「<?= site_url('checkin');?> 「,function(){ return; }); – WhiskeyMike

+0

沒問題。我看到...恐怕已經有一段時間了,因爲我處理任何jQuery ajax,任何ajax都是真的(我只學習jQuery和ajax作爲獲得興趣webapp的方法),所以我可能無法幫助你。也許開始另一個問題? – Grezzo