2016-01-15 28 views
5

Vì vậy, tôi có một ứng dụng web có xác thực cơ bản.Kiểm tra xem một khoảng thời gian có đang chạy hay không và viceversa

Khi im đăng nhập, một Interval được thiết lập:

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

Sau đó, khi im đăng xuất khỏi tôi cần phải dừng lại khoảng:

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

Nhưng nó không làm việc, tôi nghĩ rằng cách để kiểm tra nếu một khoảng tồn tại là sai ... tôi có thể thiết lập khoảng thời gian để nó đang chạy khi im đăng nhập, nhưng tôi cần phải dừng/xóa nó khi tôi bấm vào nút Logout của tôi và nó không ...

PS . im sử dụng khoảng thời gian để kiểm tra "myFunction" tự động mỗi 2 giây, nhưng có thể có một cách khác để thực hiện điều này mà không có một khoảng thời gian? thx

+0

var khoảng thời gian của bạn không phải là toàn cục và do đó không có sẵn trong logout func. Nếu bạn có thể làm cho nó toàn cầu hoặc bên ngoài funcs và sau đó thử. Sau đó, nó sẽ làm việc. –

+0

Hãy lấy nó ra, vì nó không phải toàn cầu. console.log() một cái gì đó để bạn biết nó đang xảy ra. – codeninja

+1

@xnanitox, demo tại đây https://jsfiddle.net/5he9oarw/3/ –

Trả lời

8

Biến số interval của bạn cần phải được khai báo ở phạm vi cao hơn nơi có sẵn cho cả hai hàm. Như bạn có nó bây giờ, nó là một biến cục bộ mà chỉ tồn tại trong lời gọi cụ thể của hàm xử lý sự kiện của bạn. Vì vậy, khi xử lý sự kiện tiếp theo được gọi, biến trước đó không còn tồn tại. Bạn cũng có thể muốn bảo vệ chống lại nhấp chuột liên tiếp trên đăng nhập:

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

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

Và, bạn không cần phải kiểm tra để xem nếu intervalundefined. Bạn chỉ có thể gọi clearInterval() trên đó và clearInterval() sẽ bảo vệ chống lại bất kỳ đối số không hợp lệ nào bạn vượt qua nó.

1

Đây là ví dụ đơn giản trong đó biến khoảng thời gian của bạn phải nằm trong phạm vi toàn cầu cho cả hai sự kiện nhấp chuột.

<!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> 
Các vấn đề liên quan