2016-01-15 17 views
5

So habe ich eine Web-App mit Basis-Authentifizierung.Überprüfen Sie, ob ein Intervall läuft und umgekehrt

Wenn im angemeldet, ein Intervall festgelegt ist:

$("#login").click(function(e) { 
var interval = setInterval(function(){myFunction();}, 2000); }); 

Dann, wenn im i das Intervall stoppen müssen abgemeldet:

$("#logout").click(function(e) { 
if(typeof interval !== 'undefined') clearInterval(interval); }); 

Aber es funktioniert nicht, ich glaube, die Art und Weise zu Überprüfen Sie, ob ein Intervall existiert falsch ist ... Ich kann das Intervall so einstellen, dass es läuft, wenn ich angemeldet bin, aber ich muss es stoppen/löschen, wenn ich auf meine Abmelden-Schaltfläche klicke und es nicht tut ...

PS . Ich verwende das Intervall, um "myFunction" automatisch alle 2 Sekunden zu überprüfen, aber vielleicht gibt es einen anderen Weg, dies ohne ein Intervall zu erreichen? thx

+0

Ihre Intervallvariable ist nicht global und daher in der Abmeldefunktion nicht verfügbar. Wenn Sie es global oder außerhalb der Funktionen machen können und dann versuchen. Dann sollte es funktionieren. –

+0

Nimm es einfach raus, da es nicht global ist. console.log() etwas, damit Sie wissen, dass es passiert. – codeninja

+1

@xnanitox, Demo hier https://jsfiddle.net/5he9oarw/3/ –

Antwort

8

Ihre interval Variable muss in einem höheren Bereich deklariert werden, in dem sie für beide Funktionen verfügbar ist. Wie Sie es jetzt haben, ist es eine lokale Variable, die NUR innerhalb des bestimmten Aufrufs Ihrer Event-Handler-Funktion existiert. Wenn also der nächste Event-Handler aufgerufen wird, existiert diese vorherige Variable nicht mehr. Sie können auch gegen aufeinanderfolgende Klicks auf Login schützen möchten:

var interval; 
$("#login").click(function(e) { 
    if (!interval) { 
     interval = setInterval(function(){myFunction();}, 2000); 
    } 
}); 

$("#logout").click(function(e) { 
    clearInterval(interval); 
    interval = null; 
}); 

Und Sie müssen nicht, um zu überprüfen, ob intervalundefined ist. Sie können einfach clearInterval() darauf anrufen und clearInterval() schützt vor jedem ungültigen Argument, das Sie übergeben.

1

Hier ist ein einfaches Beispiel, in dem Ihre Intervallvariable für beide Klickereignisse im globalen Gültigkeitsbereich sein sollte.

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $(document).ready(function(){ 
      function myFunction(){ 
       var d = new Date(); 
       var t = d.toLocaleTimeString(); 
       document.getElementById("demo").innerHTML = t; 
      } 
      var interval; 

      $("#start").click(function(){ 
       interval = setInterval(function(){ 
         myFunction(); 
       },2000); 

      }); 

      $("#stop").click(function(){ 
       clearInterval(interval); 
      }); 


     }); 
     </script> 
</head> 
<body> 
    <p id="demo"></p> 
    <button id="start">Start</button> 
    <button id="stop">Stop</button> 
</body> 
</html> 
Verwandte Themen