0

私はタイマーサービスで簡単なタイマーサービスを作成しています。タイマーサービスでは、毎分ユーザーを監視しています。clearIntervalがsetIntervalタイマーをクリアしない理由

ページロード中にログアウトするためのアラートを取得するには3分、1分前に進むボタンをクリックしてブートストラップの警告を表示するには2分を意味し、現在の間隔をクリアし、 3分後にログアウトするよう警告する警告を受け取ります。

初めて進行中のボタンをクリックしている間は、そのユーザーの値を再割り当てしません.3分目には、ログアウトが表示されます。

コードの一部が間違っています。

<!DOCTYPE html> 
<html> 

    <head> 
    <link data-require="[email protected]" data-semver="4.0.0-alpha.4" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.4/css/bootstrap.min.css" /> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js" ></script> 
    <script data-require="[email protected]" data-semver="3.3.6" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body onload="TimerService()"> 
    <p id="demo"></p> 
    <h1 id="title">Javascript timer problem</h1> 
    <div id="modeldialog"></div> 
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static"> 
     <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
      <label class="session-expiration"> 
       <span>Session Expiration</span> 
       <img src="~/Images/Warning_Alert_Icon_26.png" /> 
      </label> 
      </div> 
      <div class="modal-body"> 
      <div class="session-message"> 
       <p class="time-message">your Session will expire in         <i id="timer" class="fa fa-clock-o"> 
        <span class="expire">Minutes </span> 
       </i> 

.click proceed to stay Login.</p> 
       <p class="time-message"> 
       <b>Click Proceed to stay Login.</b> 
       </p> 
      </div> 
      </div> 
      <div class="modal-footer"> 
      <button type="button" class="btn btn-default" onclick="LogOut()">Logout</button> 
      <button type="button" class="btn btn-primary" onclick="proceed()">Proceed</button> 
      </div> 
     </div> 
     </div> 
    </div> 
    </body> 

</html> 

のjavascript:

function proceed() 
{ 
$("#myModal").toggle(); 
TimerService(); 
} 

function load(){ 
    alert(" if click proceed , timer service extended another 3 minutes else logout after 3 "); 
    $("#myModal").modal(); 

    } 

function TimerService() 
    { 
    alert("TimerService"); 
    var timer = false; 
    clearInterval(timer); 
    if (timer == false) { 
     var lastDigestRun = new Date(); 
      lastDigestRun = Date.now(); 
      var s = lastDigestRun + 3 * 60 * 1000; 
      // for reference 
      document.getElementById("demo").innerHTML = new Date(s); 
      console.info("Your logout time +" + new Date(s)); 

       timer=setInterval(function() {     
        var now = Date.now(); 
        var displaytime = now - lastDigestRun > 2 * 60 * 1000; 

        if (now - lastDigestRun > 2 * 60 * 1000) {      
         load(); 
         } 

         if (now - lastDigestRun > 3 * 60 * 1000) { 
         alert("logout"); 

         }  
       }, 60 * 1000); 

     } 
} 

Plunkerデモ:

https://plnkr.co/edit/qwNJF648LIvUUNT3IMkc?p=preview

+0

'setInterval()'を作成する前にクリアします。 –

+0

'clearInterval'は' setInterval'タイマーで 'setTimeout'タイマーをクリアするだけです。 – Bergi

+0

@Jyothi Babu Araja次に、初めてクリックすると、クリックした後、タイマーを再ロードする必要があるため、タイマーを再起動する必要があるため、最初にクリアする必要があります。 –

答えて

2

あなたはタイムアウトをキャンセルするtimer変数にwindow.clearTimeoutを呼び出す必要があります。

あなた TimerService()

$(document).on('click', function() { 
    clearTimeout(timer) 
} 

で例えば

、およびsetTimeout()の代わりsetInterval()使用。それはあなたの文脈にとってより適切です。 setInterval()をそのまま使用して削除する場合は、clearTimeout()ではなく、上記のコードをclearInterval()に更新してください。

+0

申し訳ありません私は私の質問を更新しました、私は明確な間隔を使用していますが、コードの –

+0

ここで何かが間違っていても、興味があるかどうか確認することはできません。github.com/MohamedSahir/UserSession - –

0

次のコードビットがあります:明白な理由のために

var timer = false; 
clearInterval(timer); 
if (timer == false){ 

を、これは常に真として評価しようとしています。さらに、clearIntevalは偽で呼び出されるので、何もしません。

+0

興味があればクリアできません。https://github.com/MohamedSahir/UserSession –

関連する問題