管理JavaScript中动态元素中的计时器
实际上,我正在通过AJAX从数据库中检索一些数据,在检索数据时,我使用JavaScript在HTML中创建了一些动态元素。我在容器中创建了动态行,在该行中创建了一个类为“col-md-4”的动态div,它是父行的子行,这意味着在一个动态行中至少可以有3个class=“col-md-4”的动态div。为此,在AJAX的obj.success函数中使用了一个循环。使用loop在动态行中生成3个动态元素的目的。如果不使用loop,那么新行将只有一个col-md-4类的div 现在的问题是,我从数据库中检索一些时间,然后取当前时间,我得到两个tme的差异,然后使用一个函数来运行时间。所有这些都是循环。现在的问题是计时器只为行中的最后一个元素运行。 我在另一个场景中使用计时器,但是没有问题,因为在该场景中没有使用循环管理JavaScript中动态元素中的计时器,javascript,jquery,html,css,Javascript,Jquery,Html,Css,实际上,我正在通过AJAX从数据库中检索一些数据,在检索数据时,我使用JavaScript在HTML中创建了一些动态元素。我在容器中创建了动态行,在该行中创建了一个类为“col-md-4”的动态div,它是父行的子行,这意味着在一个动态行中至少可以有3个class=“col-md-4”的动态div。为此,在AJAX的obj.success函数中使用了一个循环。使用loop在动态行中生成3个动态元素的目的。如果不使用loop,那么新行将只有一个col-md-4类的div 现在的问题是,我从数据库中
var ajax=prompt('Confirm demo or paste ajax data','[{“id”:1},{“id”:2},{“id”:3},{“id”:4},{“id”:5}');
显示(ajax);
功能显示(响应){
var n=1;
风险值时间=[“2019-09-19 12:59”、“2019-09-27 12:59”、“2019-12-19 12:59”、“2019-11-19 12:59”、“2019-10-19 12:59”];
var time=new Date().toLocaleTimeString('en-GB');
var res=时间片(0,-3);
var today=新日期();
var dd=String(today.getDate()).padStart(2,'0');
var mm=String(today.getMonth()+1).padStart(2,'0');
var yyyy=today.getFullYear();
今天=yyyy+'-'+mm+'-'+dd;
var电流=今天+“”+res;
//警报(当前);
var data=JSON.parse(响应);
if(数据长度){
对于(var i=0;i您正在经历的行为是同步工作流问题中的一个经典异步函数。在您的setInterval回调中,您正在使用值lmn。当回调函数访问此变量时,代码流将在循环中循环,并且lmn将将留下最大循环索引值
因此,为了解决这个问题,您将异步函数封装在一个闭包函数调用中,并将该调用中使用的变量(设置在异步方法之外)作为参数发送回该闭包调用
为了更好地理解这是如何工作的,请在调试控制台中使用异步回调中lmn变量的位置放置一个检查点,无论是否使用闭包调用
要了解有关闭包的更多信息,请执行以下操作:
var ajax=prompt('Confirm demo or paste ajax data','[{“id”:1},{“id”:2},{“id”:3},{“id”:4},{“id”:5}');
显示(ajax);
功能显示(响应){
var n=1;
风险值时间=[“2019-09-19 12:59”、“2019-09-27 12:59”、“2019-12-19 12:59”、“2019-11-19 12:59”、“2019-10-19 12:59”];
var time=new Date().toLocaleTimeString('en-GB');
var res=时间片(0,-3);
var today=新日期();
var dd=String(today.getDate()).padStart(2,'0');
var mm=String(today.getMonth()+1).padStart(2,'0');
var yyyy=today.getFullYear();
今天=yyyy+'-'+mm+'-'+dd;
var电流=今天+“”+res;
//警报(当前);
var data=JSON.parse(响应);
if(数据长度){
对于(变量i=0;i
DIV.col-md-4{
显示:内联;
背景色:#FF0080;
保证金:5px;
}
.行{
显示:块;
背景色:#80E080;
填充:3倍;
}
还有一个问题,我告诉过我,我正在从数据库中检索值,但只有timer的值才是最后一个,我无法理解它@مہعممم㶋㶋,你能详细说明吗?我的意思是说,来自数据库的数据在数组的每个索引中都是数组。时间值不同,但代码只是选择了最后一个i的时间ndex并为所有元素显示相同的计时器var distance=(新日期(数据[i+j].time)).getTime()-(新日期(当前)).getTime();
我在这里使用了这一行data[i+j]。每次拾取上一个索引的值时,时间都会发生变化