Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery对话框中的javascript setInterval()在销毁或删除时不停止_Javascript_Jquery_Ajax_Jquery Ui - Fatal编程技术网

jQuery对话框中的javascript setInterval()在销毁或删除时不停止

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,

我有一个jQuery对话框,它显示并加载一个外部页面。在该页面中,我正在运行一个
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事件。