Javascript 暂停计时器
我有一个带有两个标签的页面,每30秒通过计时器刷新一次。选择tab-1或编辑数据时,我需要暂停/取消它,并在选择tab-0或保存编辑时重新启动它 timer变量在.html文件中,对start/stop的调用在.js文件中 HTML文件:Javascript 暂停计时器,javascript,Javascript,我有一个带有两个标签的页面,每30秒通过计时器刷新一次。选择tab-1或编辑数据时,我需要暂停/取消它,并在选择tab-0或保存编辑时重新启动它 timer变量在.html文件中,对start/stop的调用在.js文件中 HTML文件: <script> var interval = setTimeout(function() { window.location.reload(1); }, 30000); &l
<script>
var interval = setTimeout(function() {
window.location.reload(1);
}, 30000);
</script>
但是,编辑计时器停止不起作用:
jQuery.ajax({
url: 'HandbookServlet',
type: 'POST', data: {formType: "getRecord",
id: id
},
dataType: 'json',
async: false,
success: function(responseText) {
var obj = JSON.stringify(responseText);
var obj2 = JSON.parse(obj);
jQuery('#lblEditDate').text(obj2.strDateSigned);
jQuery('#taEditComment').val(obj2.comment);
jQuery('#divAlert').show();
window.clearInterval(interval); //stop timer doesn't work here
}, error: function(request, status, error) {
alert("An error occurred. Error: " + status + ", " + error);
}
});
没有生成错误。“window.clearInterval”是否仅通过“jQuery(document).ready”起作用?问题不在于范围或计时器本身(而是“操作员顶空和计时”) 问题是编辑按钮在tab0上(我的原始问题中没有提到)。单击该按钮时,事件传播到选项卡,触发document.ready中的代码,并在函数中停止计时器后重新启动计时器 为了解决此问题,我将click事件发送给函数,并使用event.stopPropagation()防止选项卡拾取click:
function displayRecord(e, id) {
e.stopPropagation();
stopTimer();
jQuery.ajax({
url: 'HandbookServlet',
type: 'POST', data: {formType: "getRecord",
id: id
},
dataType: 'json',
async: false,
success: function(responseText) {
var obj = JSON.stringify(responseText);
var obj2 = JSON.parse(obj);
jQuery('#itemId').val(id);
jQuery('#lblEditDate').text(obj2.strDateSigned);
jQuery('#taEditComment').val(obj2.comment);
jQuery('#divAlert').show();
}, error: function(request, status, error) {
alert("An error occurred. Error: " + status + ", " + error);
}
});
}
这回答了你的问题吗@乌布雷克:不太好。计时器停止确实起作用,但仅在文档就绪代码中起作用。在使用ajax调用的函数中,它不起作用。在我看来,这可能是一个范围问题。您的
间隔在哪里定义?您在Ajax成功回调中访问的interval
是否与在中存储setTimeout
引用的interval
相同?@AlainDoe:该变量在.html文件中设置。文档就绪和ajax函数位于.js文件中。(我已经用这些信息更新了这个问题)但是,它在文档准备中确实有效。如果变量可以在那里看到,那么它不应该在ajax函数中看到吗?首先,clearTimeout
和clearInterval
是不可互换的。您不能使用clearInterval
停止setTimeout
。第二在中单击
-处理程序,使用新值覆盖间隔
,而不停止上一个值;类似于上一次单击或html文件中的单击。清除一个不再存在的超时没有害处。
function displayRecord(e, id) {
e.stopPropagation();
stopTimer();
jQuery.ajax({
url: 'HandbookServlet',
type: 'POST', data: {formType: "getRecord",
id: id
},
dataType: 'json',
async: false,
success: function(responseText) {
var obj = JSON.stringify(responseText);
var obj2 = JSON.parse(obj);
jQuery('#itemId').val(id);
jQuery('#lblEditDate').text(obj2.strDateSigned);
jQuery('#taEditComment').val(obj2.comment);
jQuery('#divAlert').show();
}, error: function(request, status, error) {
alert("An error occurred. Error: " + status + ", " + error);
}
});
}