将倒计时计时器的当前值存储在变量中,以便在模板工具包文件中使用

storing the current value of countdown timer in variable for using in the template toolkit file

本文关键字:文件 工具包 变量 计时器 倒计时 存储      更新时间:2023-09-26

我在Hours left字段中设置了一个倒计时计时器,以查找剩余的小时数。我还有一个输入总估计时间的字段,当输入总估计时间的值时,计时器将启动。

现在我的要求是,当我改变了总估计时间,我想要得到定时器的值,在那个时候,从新定时器开始的地方计算新的值。

for例如:我的第一个总估计时间= 3当计时器达到02:00:00时,我将总估计时间更改为5,因此我的计时器将从04:00:00重置(逻辑:5-3+2 = 4或5-(3-2)= 4)

所以我想要当前的倒计时计时器值。我怎么能这么做??

my Timer.js文件:

var Timer;
var TotalSeconds;
function CreateTimer(TimerID, Time) {
Timer = document.getElementById(TimerID);
TotalSeconds = Time;
UpdateTimer()
window.setTimeout("Tick()", 1000);
}
function Tick() {
if (TotalSeconds <= 0) {
alert("Time's up!")
return;
}
TotalSeconds -= 1;
UpdateTimer()
window.setTimeout("Tick()", 1000);
}
function UpdateTimer() {
var Seconds = TotalSeconds;
var Days = Math.floor(Seconds / 86400);
Seconds -= Days * 86400;
var Hours = Math.floor(Seconds / 3600);
Seconds -= Hours * (3600);
var TimeStr = ((Days > 0) ? Days + " days " : "") + LeadingZero(Hours) + ":" +    LeadingZero(Minutes) + ":" + LeadingZero(Seconds);
Timer.innerHTML = TimeStr;
}
function  LeadingZero(Time) {
return (Time < 10) ? "0" + Time : + Time;
}

这是我调用定时器的地方。

<script type="text/javascript" src="./Timer.js"></script>
<div id='timer'></div>
[% IF bug.estimated_time >0 %]
<script type="text/javascript">
var time;
time = CreateTimer("timer",[% bug.estimated_time %]*3600);
window.onload = CreateTimer("timer",[% bug.estimated_time %]*3600);
</script>
[% END %]
这里我想调用函数
 <tr>
    <td align="center">
      <input name="estimated_time" id="estimated_time"
             value="[% PROCESS formattimeunit
                               time_unit=bug.estimated_time %]"
             size="6" maxlength="6" onchange="updateRemainingTime();">
      <input type = "Hidden" name="estimate_time" id="estimate_time" value="[% bug.estimated_time %]" size="6" maxlength="6">
    </td

在调用updateRemainingTime(),我想采取定时器的当前值,并使用它,我想重置计数器使用上述逻辑....

Template Toolkit在这里基本上是无关紧要的——一旦页面被呈现,TT就不再起作用了。

如果没有Timer.js中的细节(有很多很多Javascript计时器),就不可能给你一个完整的答案。但是大概有一种方法可以获得计时器的当前值,或者与它交互来改变它。如果没有,你需要创建一个。

我将假设您正在使用这个Timer,因为它的方法名称与您的代码相对应。如果你还没有,希望这篇文章能让你走上正轨。

基本上,您需要像这样修改其中一个函数:

function UpdateTimer(adjustment) {
    if (typeOf adjustment != 'undefined') {
        // adjustment provided, change Timer value
        TotalSeconds += adjustment;
    } 
    Timer.innerHTML = TotalSeconds;
}

这个变化允许你选择性地传递一个调整(正或负)来改变定时器的值,然后你像这样调用它:

function updateRemainingTime() {
    var $origTime = $('#estimate_time');
    var newEstim = $('#estimated_time').val();
    UpdateTimer((newEstim - $origTime.val())*3600);
    $origTime.val(newEstim); // update hidden field to new value
}

您没有提到这些值是否需要存储在数据库中,但这是完全不同的问题。


看起来你使用的代码与我找到的代码关系非常密切,我建议你做的仍然成立:

function UpdateTimer(adjustment) {
    var Seconds = TotalSeconds;
    if (typeOf adjustment != 'undefined') {
        // adjustment provided, change Timer value
        Seconds += adjustment;
    }
    /* rest of your UpdateTimer code remains unchanged */
}