2016-01-15 12 views
5

kontrol edin Bu yüzden temel kimlik doğrulaması ile bir web uygulaması var. im oturumdan zamanBir Interval çalışıyor ve viceversa

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

Sonra ben aralığını durdurmak için gereken: im giriş yaptığında

, bir Aralığı ayarlanır

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

Ama işe doesnt i yolu düşünüyorum Bir aralığın var olup olmadığını kontrol edin ... giriş yaptığım zaman aralığını ayarlayabilirim, ama Çıkış düğmemde tıklattığımda onu durdurmam/temizlemem gerekiyor ...

PS . otomatik olarak her 2 saniyede bir "myFunction" i kontrol etmek için aralıkları kullanıyorum, fakat belki bir aralık olmadan bunu başarmanın başka bir yolu var mı? thx

+0

Arayabileceğiniz varyasyonunuz global değildir ve bu nedenle çıkış yapamazsınız. Küresel hale getirebilir ya da funkların dışını yapabilir ve deneyebilirsiniz. O zaman işe yaramalı. –

+0

Sadece küresel olmadığından onu çıkarın. console.log() bir şey olup bittiğini biliyorsunuz. – codeninja

+1

@xnanitox, buradaki demo https://jsfiddle.net/5he9oarw/3/ –

cevap

8

interval değişkeninizin, her iki işlevde de kullanılabileceği daha yüksek bir kapsamda bildirilmesi gerekir. Şimdi sahip olduğunuz gibi, SADECE olay işleyici işlevinizin belirli bir çağrısı içinde varolan yerel bir değişkendir. Böylece, bir sonraki olay işleyicisi çağrıldığında, bu önceki değişken artık mevcut değildir. Eğer intervalundefined olup olmadığını görmek için kontrol etmek gerekmez,

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

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

Ve: Ayrıca girişte ardışık tıklama karşı korumak isteyebilirsiniz. Üzerine clearInterval() numaralı telefonu arayabilir ve clearInterval() ilettiğiniz geçersiz argümanlara karşı koruma sağlayabilirsiniz.

1

Her iki tıklama olayı için aralık değişkeninizin global kapsamda olması gereken basit bir örnek.

<!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> 
İlgili konular