gpt4 book ai didi

javascript - 多个年龄计数器(计时器)的问题

转载 作者:行者123 更新时间:2023-11-28 02:17:17 24 4
gpt4 key购买 nike

我有一个页面,我想在其中为用户输入的出价设置“年龄计数器”。用户数量会因情况而异,因此需要考虑在内。我写的是:

function timer(i) {
// this selects a 'hh:mm:ss' timestamp
if ($("#time_0" + i).text() !== "") {
var now = new Date();
var date = now.toDateString();
var tStamp = new Date(date + "," + $("#time_0" + i).text());
var diff = now - tStamp;
var mins = Math.floor(diff / (1000 * 60));
var secs = Math.floor((diff / 1000) % 60);
if (mins < 10) {
mins = "0" + mins;
}
if (secs < 10) {
secs = "0" + secs;
} else if (secs == 60) {
secs = "00";
}
$("#user" + i + "-t").text(mins + ':' + secs);
}
}

$(document).ready(function() {
//
var ids = [];
$("td[id^='time_0']").each(function() {
var i = ($(this).attr("id")).slice(-1);
ids.push(i);
});
for (i in ids) { // in my example ids = [1,2,3]
setInterval(function() {timer(i);}, 1000);
}
});

计时器本身的功能正如我所希望的那样,但仅适用于用户#2(中间的用户)。我认为如果我遇到此问题,则可能是列表中第一个或最后一个具有工作计时器的用户,但我为用户 #1 和 #3 得到了空白单元格。

有人知道如何解决这个问题吗?感谢您抽出时间。

==编辑==

我做了一个简单的jsfiddle

最佳答案

在您的版本中,循环从未超过第一个引用,即 timer(0),因为您使用 timer(i) 调用了函数,它调用了第一个引用数组 ids 中的键。当您在循环中使用 setInterval 时,它将继续循环第一个 setInterval 直到终止。通过将 i 放入匿名函数中,每个 setInterval 都会被触发。

$(document).ready(function () {
var ids = [];
$("td[id^='time_0']").each(function () {
var i = $(this).attr("id").slice(-1);
ids.push(i);
});

for (i in ids) {
(function(i) { // i needs to be stored into a anonymous function otherwise it gets overwritten
setInterval(function() {
timer(ids[i]); // calling just timer(i) would use array keys, not the actual values - ids[i] means: "give me the value of the key of i"
}, 1000)
})(i);
}
});

Made changes to your Fiddle

关于javascript - 多个年龄计数器(计时器)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com