我有多个使用 javascript 代码作为响应的 ajax 请求,一旦加载新代码,我需要停止执行以前的 javascript 代码,我的意思是停止间隔、函数、超时...
我的代码:
$.get("/ucmd", params, function(data) {
var $data = document.createElement("div");
$data.innerHTML = data;
var em = $data.getElementsByTagName("*");
for(var i=0;i<em.length;i++)
{
if(em[i].tagName === "SCRIPT")
{
if($("#"+em[i].id)) document.body.removeChild($("#"+em[i].id));
var script = document.createElement("script");
script.id = em[i].id;
script.language="javascript";
script.type="text/javascript";
script.innerHTML = em[i].innerHTML;
document.body.appendChild(script);
}
}
});
是否可以在加载新代码时停止执行先前的代码?
P.S:我想使用纯 JavaScript 代码。
我的解决方案:
window.$timeout = {};
window.$interval = {};
window.$setTimeout = window.setTimeout;
window.$setInterval = window.setInterval;
window.$clearTimeout = window.clearTimeout;
window.$clearInterval = window.clearInterval;
window.setTimeout = function(id, code, delay) {
if(typeof $timeout[id] !== "undefined") clearTimeout(id);
$timeout[id] = $setTimeout(code, delay);
};
window.clearTimeout = function(id) {
$clearInterval($timeout[id]);
delete $timeout[id];
};
window.setInterval = function(id, code, delay) {
if(typeof $interval[id] !== "undefined") clearInterval(id);
$interval[id] = $setInterval(code, delay);
};
window.clearTimeout = function(id) {
$clearInterval($interval[id]);
delete $interval[id];
};
最佳答案
要使用timeout()
停止现有调用,您可以使用:
clearTimeout(t);
您也许可以保留一个全局变量来记录调用函数的次数,并围绕该变量编写clearTimeout()
...
调用电话如下:
t = setTimeout("thing()",1000);
关于javascript - 停止执行一些 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11328912/