2012-10-05 45 views
0

我想取消由javascript函數啓動的重定向。 JavaScript在5秒內重定向到主頁,並顯示爲錯誤消息。我想通過鼠標單擊錯誤消息來取消重定向。請任何幫助。在鼠標點擊事件取消javascript重定向

enter image description here

PHP代碼:

<div id="error">  
<?php 
    //redirect 
    if (isset($_GET['err'])){ 
     if ($_GET['err'] == 1){ 
      echo "You are successfully logged out. You will be redirected to the home page in <strong><span id = 'seconds'> 5 </span> </strong> seconds."; 
     }elseif($_GET['err'] == 0){ 
      echo "Your session has been expired. Please login again.!"; 
     } 
    } 
?> 
</div> 

的Javascript:

 <script> 
     var seconds = 5; 
     var err = <?php echo $_GET['err'] ; ?>; 

     if (err == 1){ 
      setInterval(
      function(){ 
       if (seconds <= 1) { 
        window.location = 'http://****.***.***.***/***'; 
       } 
       else { 
        document.getElementById('seconds').innerHTML = --seconds; 
       } 
       }, 
       1000 
      ); 
     } 
    </script> 
+1

當你怎樣對待自己*點擊*事件?你甚至試圖處理它? – sp00m

+0

提示:您必須在另一個函數中用'clearInterval'清除間隔。爲此,您需要對原始時間間隔'var myRedirectionInterval = setInterval(....)'的引用。 – Zeta

+0

你想取消點擊錯誤消息,但我沒有看到你的代碼中的任何地方顯示錯誤消息,所以用戶可以點擊它.. – Nelson

回答

3

你實際上是試圖阻止一個setInterval的,你可以很容易地通過先命名它做的,然後在需要的情況下清理它。

var redirInt = setInterval(function() { 
    // etc. 
},5000); 

和你解除線...

clearInterval(redirInt); 
+0

感謝inhan。它的工作原理就像是一種魅力,也非常感謝你們所有試圖幫助我的人 –

+0

沒有問題,並且在你使用'setTimeout()'函數的情況下爲了能夠操作任何間隔函數,無論setInterval還是setTimeout,都需要命名它。 – inhan

1
var tId; // create a global var (or put it in a managed scope) 
$(function() { // jquery onload 
    tId = setInterval(function() { ... },5000); // or use timeout if no counter 
    $("#errordiv").on("click",function() { 
    clearInterval(tId); // clear it 
}); 
}); 
+1

沒有解釋,不適合當前的情況:(編輯:和突然jQuery。 – Zeta

+0

是的 - 我看到了jquery評論:) – mplungjan

+0

Woops,忘記額外的jQuery評論,我撇去OP的評論^^「。 – Zeta

0

試試這個:

<script> 

    var seconds = 5; 
    var err = <?php echo $_GET['err'] ; ?>; 
    var redir = null; 

    if (err == 1){ 

     var redir_interval = setInterval(
     function(){ 
      if (seconds <= 1) { 
       redir = window.location = 'http://****.***.***.***/***'; 
      } 
      else { 
       document.getElementById('seconds').innerHTML = --seconds; 
      } 
      }, 
      1000 
     ); 
    } 

    function cancel_redir() { 

     redir = null; 
     clearInterval(redir_interval); 

    } 

</script> 

<div id="error" onclick="cancel_redir();"> 
You are successfully logged out. You will be redirected to the home page in <strong><span id = 'seconds'> 5 </span> </strong> seconds. 
</div> 
1

setInterval返回它創建,以便您可以使用它取消clearInterval定時器的ID。

你可以使用這樣的事情:

var timer; 

$(document).ready(function() { 
    timer = setInterval(function() {...}, 1000); 

    $('#error').click(function() { 
     clearInterval(timer); 
    }); 
}); 
+0

他還提供了一個倒計時他的例子,所以'setInterval'在這種情況下似乎是合理的。 – Zeta

+0

@Zeta:我似乎已經在那部分上掠過了,謝謝! – Blender