[英]Ruby Rails - JS - stop previous scripts in AJAX
我已经将此javascript更改为递增计时器。 脚本工作正常。 但是我在ajax响应中使用它。 第一次运行ajax查询时,我得到JS作为响应,并且此时钟运行良好。 但是,当我在第一个请求之后发出更多请求时,计时器就会感到困惑,好像正在运行多个setInterval一样,这会导致不受控制的计数,因此,在每个新的ajax响应之后,统计信息的运行速度都会更快,而不是按秒逐步递增。 我该如何解决?
function calcage(secs, num1, num2) {
s = ((Math.floor(secs/num1))%num2);
return s;
}
function clock() {
++startNumber;
DisplayStr = displayFormat.replace(/%%D%%/g, calcage(startNumber,86400,100000));
t = calcage(startNumber,3600,24);
if (t < 10) {
DisplayStr = DisplayStr.replace(/%%H%%/g, "0"+t);
} else {
DisplayStr = DisplayStr.replace(/%%H%%/g, t);
}
t = calcage(startNumber,60,60);
if (t < 10) {
DisplayStr = DisplayStr.replace(/%%M%%/g, "0"+t);
} else {
DisplayStr = DisplayStr.replace(/%%M%%/g, t);
}
t = calcage(startNumber,1,60);
if (t < 10) {
DisplayStr = DisplayStr.replace(/%%S%%/g, "0"+t);
} else {
DisplayStr = DisplayStr.replace(/%%S%%/g, t);
}
$("#counter").html(DisplayStr);
}
$('#view').html(<%= (render :partial => 'ajax_response').to_json.html_safe %>);
#partial render and read "#timer" value as integer to start ahead. "#timer" is in "#view" div
$(function(){
c = $("#timer").val();
startNumber = parseFloat(c);
displayFormat = "%%D%% Days, %%H%%:%%M%%:%%S%%";
var int=self.setInterval("clock()",1000);
});
这是因为有多个正在运行的时间间隔。 您需要通过执行clearInterval(int)
来清除要停止的时间间隔。 或者,或者确保仅对任何给定函数运行一次setInterval
。
此外,除了要点外,但是将字符串作为setInterval
参数是一个不好的事情(tm)。 使用setInterval(clock, 1000)
代替。
同样是#2,即使它是完全合法的,我能否只说一个带有int
变量的令人困惑呢? :P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.