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