2012-06-28 24 views
0

我有一個jQuery對話框出現並加載一個外部頁面。在該頁面中,我運行了一個setInterval()函數,它每隔1秒連續查詢我的服務器(AJAX)。問題是,當我關閉對話框時,setInterval不會停止運行。jQuery對話框中的javascript setInterval()不會停止銷燬或刪除

這裏是對話框代碼:

var theUrl = 'someUrl'; 

var popUp = document.createElement('div'); 

$(popUp).dialog({ 
     width: 400, 
     height: 270, 
     title: "Some Title", 
     autoOpen: true, 
     resizable:false, 
     close: function(ev, ui) { 
        $(this).dialog('destroy'); 
       }, 
     modal: true, 
     open: function() { 
        $(this).load(theUrl); 
       } 
});  

想拜訪密切$(this).dialog('destroy')$(this).remove()document.body.removeChild(popUp)。沒有工作。反正有'卸載'加載頁面?

+0

setInterval與DOM或jQuery無關。它需要單獨清除,可能是由於像「close」這樣的DOM事件。 – Bergi

回答

2

setInterval返回一個處理程序,您可以傳遞給clearInterval來停止運行該函數。以下是它如何工作的基本示例。

var handler = setInterval(function() {}, 2000); 
clearInterval(handler); 

爲了您的例子中,你會想打電話clearIntervalui.dialogclose方法。

文檔:

setInterval - https://developer.mozilla.org/en/window.setInterval

clearInterval - https://developer.mozilla.org/en/DOM/window.clearInterval

編輯

您將無法調用clearInterval沒有從setInterval存儲的處理程序,因此,如果通話到setInterval是另一個腳本中唯一的w你要捕捉處理程序就是覆蓋window.setInterval本身。

$(function() { 
    var originalSetInterval = window.setInterval; 
    var handlers = []; 

    window.setInterval = function() { 
     handlers.push(arguments[0]); 
     originalSetInterval(arguments); 
    }; 

    $('whatever').dialog({ 
     close: function() { 
      for (var i = 0; i < handlers.length; i++) { 
       clearInterval(handlers[i]); 
      } 
      handlers = []; 
     } 
    }); 
}); 

注意,代碼覆蓋window.setInterval一定要來包括<script>標籤在外部文件帶來了。此外,只要調用clearInterval,此方法就會清除所有間隔函數,因此這並不理想,但它是實現這一目標的唯一方法。