我创建了此计时器,该计时器在替换一个变量之前可以正常工作。
timer在3个不同的div上运行。我们的业务逻辑是,当有人在计时器结束之前出价时,计时器应动态更改,即“剩余时间+增量时间=新时间”。我将这个新时间存储在一个隐藏的值中,据我测试,它显示了完美的时间。起作用的计时器的代码是:
$(".diffinterval").each(function(){
var total_lot = $(this).val();
var count = $(this).closest(".heading").find("#lot_count").val();
var seconds=parseInt($('#diff'+count).val());
var countdownTimer = setInterval(function(){
var days = Math.floor(seconds/24/60/60);
var hoursLeft = Math.floor((seconds) - (days*86400));
var hours = Math.floor(hoursLeft/3600);
var minutesLeft = Math.floor((hoursLeft) - (hours*3600));
var minutes = Math.floor(minutesLeft/60);
var remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = "0" + remainingSeconds;
}
$('#countdown'+count).html(": " + days + "d " + hours + "h " + minutes + "m " + remainingSeconds + "s");
if (seconds == 0) {
clearInterval(countdownTimer);
alert('Bidding Time for the below Lots is Over.');
location.reload();
} else {
newtime--;
}
},1000);
});
但是我试图检索该隐藏字段中的动态变化并相应地计算时间。计时器停止。这是我正在尝试的代码块
$(".diffinterval").each(function(){
var total_lot = $(this).val();
var count = $(this).closest(".heading").find("#lot_count").val();
var seconds=parseInt($('#diff'+count).val());
var secondElement=$('#diff'+count);
var countdownTimer = setInterval(function(){
var ext_time = parseInt(secondElement.val());
var newtime;
if(ext_time > seconds)
{
newtime=ext_time;
}
else
{
newtime=seconds;
}
var days = Math.floor(newtime/24/60/60);
var hoursLeft = Math.floor((newtime) - (days*86400));
var hours = Math.floor(hoursLeft/3600);
var minutesLeft = Math.floor((hoursLeft) - (hours*3600));
var minutes = Math.floor(minutesLeft/60);
var remainingSeconds = newtime % 60;
if (remainingSeconds < 10) {
remainingSeconds = "0" + remainingSeconds;
}
$('#countdown'+count).html(": " + days + "d " + hours + "h " + minutes + "m " + remainingSeconds + "s");
if (newtime == 0) {
clearInterval(countdownTimer);
alert('Bidding Time for the below Lots is Over.');
location.reload();
} else {
newtime--;
}
},1000);
});
如果我更改
var remainingSeconds = seconds % 60;
到
var remainingSeconds = newtime % 60;
计时器停止。
答案 0 :(得分:0)
在摆弄您的return true;
变量时,会在setInterval中每秒将其初始化为ext_time
,因此它始终是HTML元素中设置的任何值。您必须从setInterval函数中取出变量初始化语句。您还必须在if / else语句的parseInt(secondElement.val())
末尾减小该值(ext_time
。
编辑:根据您的特定用例,我更新了小提琴。我添加了一个标志来检查ext_time是否已启用,并且还显示一条消息,通知您setInterval
现在替换了ext_time
计时器。
还请注意,seconds
和seconds
都选择了相同的元素值,但不确定是否要这样做,但是,如果您想要{{1} }您将需要为secondElement
变量使用不同的起始值(即,具有不同value属性的其他隐藏输入元素)
我注意到您的小提琴与您在问题中发布的代码并不完全相同,但是问题出在变量初始化的位置。