【问题标题】:storing the current value of countdown timer in variable for using in the template toolkit file将倒数计时器的当前值存储在变量中以在模板工具包文件中使用
【发布时间】:2013-06-06 20:46:23
【问题描述】:

我在“剩余小时数”字段中有一个倒计时计时器,用于查找剩余小时数。 我还有一个字段可以输入估计的总时间,输入总估计时间的值后,计时器就会启动。

现在我的要求是,当我更改总估计时间时,我想获取计时器的值,然后计算计时器再次启动的新值。

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

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

我的 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() 时,我想获取计时器的当前值并使用它,我想使用上述逻辑重置计数器....

【问题讨论】:

  • 你已经有什么代码了?
  • 我没有正确理解您....我有倒数计时器的代码以及具有字段代码的模板工具包文件。您想查看代码吗?我被困在这一点上......任何帮助都是可观的
  • 您应该提供一个您已经拥有的代码示例来演示您正在尝试解决的问题。
  • [% IF bug.estimated_time >0 %] 这里我调用函数来调用定时器。
  • 在调用updateRemainingTime() 时,我想获取定时器的当前值并执行逻辑

标签: javascript cgi countdowntimer template-toolkit


【解决方案1】:

模板工具包在这里基本上是无关紧要的——一旦页面被渲染,TT 就不再起作用了。

如果没有 Timer.js 中的详细信息(那里有几十个 Javascript 计时器),就不可能给你一个简单的答案。但是大概有一种方法可以获取计时器的当前值,或者与它进行交互以更改它。如果没有,您需要创建一个。

我假设您使用的是this 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 */
} 

【讨论】:

  • 我的答案已更新 - 您的 Timer.js 与我工作时使用的只是微不足道的不同。
  • 我在我的文件中添加了相同的代码,但是在更改估计时间的值时,计时器再次从新时间开始。即,我首先添加了 3,然后计时器从 3 开始,但是当我在某个时间后添加 5 时,它从 5 本身开始
  • 在您的代码中不清楚估计时间和估计时间包含什么 - 小时数?秒?是转换问题吗?这是不可能的。做一些调试!在Seconds += adjustment; 行之后,添加alert('TotalSeconds: ' + TotalSeconds + ', adjustment: ' + adjustment + ', Seconds: ' + Seconds)'; 看看会产生什么。
  • estimate_time 和estimate_time 都包含小时格式的估计值。
  • 调试输出中的变量值是否符合您的预期?在updateRemainingTime 中对UpdateTimer 的调用之前添加另一个alert() 行,看看newEstim$origTime.val() 有什么值。
猜你喜欢
相关资源
最近更新 更多
热门标签