我有一个简单的问题,有一个参数emp_id的函数打开一个表格,用于聊天不同的属性,我希望它每10秒自动刷新一次,现在它有点错误,因为有一个参数emp_id可以改变,一旦我改变它,消息和表格的聊天刷新双倍或三倍:)取决于你改变emp_id的次数,我希望我很清楚))无论如何这里是javascript函数:
function load_chat(emp_id) {
var url = "#request.self#?fuseaction=objects2.popup_list_chatform"
url = url + "&employee_id=" + emp_id;
document.getElementById('form_div').style.display = 'block'; AjaxPageLoad(url,'form_div',1,'Yükleniyor');
setInterval( function() {
load_chat(emp_id);
},10000);
}
有一个名单列表,一旦我点击其中一个,这个表单由这个函数打开,但是如果我点击另一个用户,我的意思是如果我更改emp_id,它会刷新,前一个和现在的表单。我如何更改它,以便它只刷新最后一个emp_id,但不刷新我已更改的所有id
谢谢大家的帮助,我真的很感激!
答案 0 :(得分:2)
这很好地封装了你正在做的事情。计时器ID(tid
)保留在闭包内,因此当您调用load_chat
时,如果有一个正在运行,它将停止间隔。
设置新网址后,它会再次启动间隔计时器。
var ChatModule = (function() {
var tid,
url;
function refresh()
{
AjaxPageLoad(url, 'form_div', 1, 'Yükleniyor');
}
return {
load_chat: function(emp_id) {
if (tid) {
clearInterval(tid);
}
// setup url
url = "#request.self#?fuseaction=objects2.popup_list_chatform"
url = url + "&employee_id=" + emp_id;
document.getElementById('form_div').style.display = 'block';
// load ajax
refresh();
// set timer
tid = setInterval(refresh, 10000);
}
}
}());
ChatModule.load_chat(123);
答案 1 :(得分:0)
请改用setTimeout
。每次执行函数时,它都会设置下一次执行(你也可以使它成为条件函数):
function load_chat(emp_id) {
... // do something
if (condition_still_met)
setTimeout(function() {
load_chat(emp_id); // with same id
}, 10000);
}
load_chat("x"); // to start
或者你必须在load_chat
函数之外使用setInterval。您可以在必要时清除间隔。
function get_chat_loader(emp_id) {
return function() {
... // do something
};
}
var id = setInterval(get_chat_loader("x"), 10000); // start
// then, somewhen later:
clearInterval(id);