关闭时在对话框内停止jquery函数?

关闭时在对话框内停止jquery函数?,jquery,Jquery,我创建了一个消息传递系统,当用户单击链接时,它会在jquery对话框中打开。它每5秒钟检查一次新消息。问题是,在用户关闭对话框后,如果用户不刷新页面,它会继续检查是否有消息占用了大量资源。那么,有没有一种方法可以在关闭对话框后终止函数 打开对话框的代码 $('body a#link').each(function() { var $dialog = $('<div></div>'); var $link = $(this).one('click', fun

我创建了一个消息传递系统,当用户单击链接时,它会在jquery对话框中打开。它每5秒钟检查一次新消息。问题是,在用户关闭对话框后,如果用户不刷新页面,它会继续检查是否有消息占用了大量资源。那么,有没有一种方法可以在关闭对话框后终止函数

打开对话框的代码

$('body a#link').each(function() {
    var $dialog = $('<div></div>');
    var $link = $(this).one('click', function() {
        $dialog
            .load($link.attr('href'))
            .dialog({
                title: $link.attr('title'),
                width: 500,
                height: 300
            });

        $link.click(function() {
            $dialog.dialog('open');

            return false;
        });

        return false;
    });
});
$('body a#link')。每个(函数(){
变量$dialog=$('');
var$link=$(this).one('click',function(){
$dialog
.load($link.attr('href'))
.对话({
标题:$link.attr('title'),
宽度:500,
身高:300
});
$link.click(函数(){
$dialog.dialog('open');
返回false;
});
返回false;
});
});
Messenger.php(已加载到对话框中)


$(函数(){
$(“表单”).submit(函数(){return false;});
});
$(“#消息”)。按键(功能(e){
如果(e.which==13){
$.ajax({
类型:“POST”,
url:“includes/sendmessage.php”,
数据:$(“#messageform”).serialize(),
成功:函数(){
$(“#消息”).val(“”);
}
});
}
});
setInterval(函数(){
var msngr=$.ajax({
键入:“获取”,
url:“includes/checkmessages.php”,
成功:功能(msg){
$('div#messages').html(msg);
$($div#messages”).scrollTop($($div#messages”)[0]。scrollHeight);
}
});
}, 5000);

您需要为重复代码分配一个变量

var refreshTimer=null;

refreshTimer = setInterval(function() {
    var msngr = $.ajax({
        type: "GET",
        url: "includes/checkmessages.php",
        success: function(msg){
            $('div#messages').html(msg);
            $("div#messages").scrollTop($("div#messages")[0].scrollHeight);
        }
    });
}, 5000);
然后,当对话框关闭时,您需要使用
clearInterval()
停止计时器重新执行

if (refreshTimer) clearInterval(refreshTimer);
更新

如果你想重新启用计时器,我会把整个东西都放到一个函数中。这样您就可以调用
stopMessageRefreshTimer()
startMessageRefreshTimer()只要你想

var refreshTimer=null;

function stopMessageRefreshTimer(){
    if (refreshTimer) clearInterval(refreshTimer);
}
function startMessageRefreshTimer(){
    refreshTimer = setInterval(function() {
        var msngr = $.ajax({
            type: "GET",
            url: "includes/checkmessages.php",
            success: function(msg){
                $('div#messages').html(msg);
                $("div#messages").scrollTop($("div#messages")[0].scrollHeight);
            }
        });
    }, 5000);
}

您需要停止设置间隔。可以这样做:

var intervalId = setInterval(function(){},5000);
clearInterval(intervalId);

使用window.clearInterval停止对话框关闭事件上的计时器

var timer = setInterval(function() {
  var msngr = $.ajax({
    type: "GET",
    url: "includes/checkmessages.php",
    success: function(msg){
        $('div#messages').html(msg);
        $("div#messages").scrollTop($("div#messages")[0].scrollHeight);
    }
  });
}, 5000);

$dialog.dialog({
   close: function(event, ui) {
      clearInterval(timer)
   }
});

哦,另一个问题,如果用户重新打开messenger,我将如何再次启动间隔?
var timer = setInterval(function() {
  var msngr = $.ajax({
    type: "GET",
    url: "includes/checkmessages.php",
    success: function(msg){
        $('div#messages').html(msg);
        $("div#messages").scrollTop($("div#messages")[0].scrollHeight);
    }
  });
}, 5000);

$dialog.dialog({
   close: function(event, ui) {
      clearInterval(timer)
   }
});