jQuery对话框中的javascript setInterval()在销毁或删除时不停止
我有一个jQuery对话框,它显示并加载一个外部页面。在该页面中,我正在运行一个jQuery对话框中的javascript setInterval()在销毁或删除时不停止,javascript,jquery,ajax,jquery-ui,Javascript,Jquery,Ajax,Jquery Ui,我有一个jQuery对话框,它显示并加载一个外部页面。在该页面中,我正在运行一个setInterval()函数,该函数每1秒连续查询一次我的服务器(AJAX)。问题是当我关闭对话框时,setInterval并没有停止运行 以下是该对话框的代码: var theUrl = 'someUrl'; var popUp = document.createElement('div'); $(popUp).dialog({ width: 400, height: 270,
setInterval()
函数,该函数每1秒连续查询一次我的服务器(AJAX)。问题是当我关闭对话框时,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(弹出窗口)
。什么都没用。是否仍要“卸载”加载的页面?setInterval
返回一个处理程序,您可以将该处理程序传递给clearInterval
,以停止函数运行。下面是它如何工作的一个基本示例
var handler = setInterval(function() {}, 2000);
clearInterval(handler);
例如,您希望在ui.dialog
的close
方法中调用clearInterval
文件:
setInterval
-
clearInterval
-
编辑
如果没有setInterval
中存储的处理程序,您将无法调用clearInterval
,因此,如果对setInterval
的调用在另一个脚本中,那么捕获处理程序的唯一方法就是重写窗口.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 = [];
}
});
});
$(函数(){
var originalSetInterval=window.setInterval;
var处理程序=[];
window.setInterval=函数(){
push(参数[0]);
原始会话(参数);
};
$('whatever')。对话框({
关闭:函数(){
对于(var i=0;i
请注意,覆盖
窗口.setInterval
的代码必须在包含
标记以引入外部文件之前出现。此外,无论何时调用clearInterval
,这种方法都会清除所有间隔函数,因此这并不理想,但这是实现这一点的唯一方法。setInterval与DOM或jQuery无关。它需要单独清除,可能是由于类似“close”的DOM事件。