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

Javascript 将倒计时计时器的当前值存储在变量中,以便在模板工具包文件中使用,javascript,cgi,countdowntimer,template-toolkit,Javascript,Cgi,Countdowntimer,Template Toolkit,我在“剩余小时数”字段中有一个倒计时计时器,用于查找剩余小时数。 我还有一个输入总估计时间的字段,输入总估计时间的值后,计时器将启动 现在我的要求是,当我改变总的估计时间时,我想得到timer的值,在那个时候,从计时器再次启动的地方计算新的值 例如: 我的第一次总估计时间=3 当计时器达到02:00:00时,我将总估计时间更改为5,因此我的计时器将从04:00:00重置(逻辑:5-3+2=4或5-(3-2)=4) 所以我想要当前的倒计时计时器值。我怎么做 my Timer.js文件: var T

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

现在我的要求是,当我改变总的估计时间时,我想得到timer的值,在那个时候,从计时器再次启动的地方计算新的值

例如: 我的第一次总估计时间=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;
}
var定时器;
var总秒数;
函数CreateTimer(TimerID,Time){
Timer=document.getElementById(TimerID);
总秒=时间;
UpdateTimer()
setTimeout(“Tick()”,1000);
}
函数Tick(){
如果(总秒数0)?天+“天”:“”)+领先零(小时)+“:”+领先零(分钟)+“:”+领先零(秒);
Timer.innerHTML=TimeStr;
}
函数引导零(时间){
返回(时间<10)-“0”+时间:+时间;
}
这就是我叫定时器的地方

<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 %]

[%如果bug.estimated_time>0%]
var时间;
time=CreateTimer(“timer”,[%bug.estimated_time%]*3600);
window.onload=CreateTimer(“timer”,[%bug.estimated_time%]*3600);
[%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


模板工具包在这里基本上是不相关的——一旦页面呈现出来,TT就不再扮演任何角色

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

我假设您正在使用,因为它的方法名与您的代码对应。如果你不是,希望这能让你走上正轨

基本上,您需要修改以下函数之一:

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) {
    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 */
} 

你已经有了什么代码?我没有正确地理解你…我有倒计时的代码,还有包含字段代码的模板工具包文件。你想看看代码吗??我被困在这一点上…任何帮助都是值得的。你应该提供一个你已经拥有的代码示例,演示你正在试图解决的问题。[%如果bug.estimated_time>0%]变量时间;window.onload=CreateTimer(“timer”,[%bug.estimated_time%]*3600);这里我调用函数来调用计时器。调用UpdateMainingTime()时,我想获取timer的当前值,并执行我的答案已更新的逻辑-您的timer.js与我使用的timer.js仅略有不同。我在文件中添加了相同的代码,但更改了估计时间的值后,计时器将再次从新时间开始。也就是说,我先添加了3,然后计时器以3开始,但当我在某个时间之后添加5时,它是从5开始的。您的代码中不清楚估计的时间和估计的时间包含什么-小时数?秒?这是一个转换问题吗?很难说。做一些调试!
秒后+=调整行,添加
警报('TotalSeconds:'+TotalSeconds+',调整:'+adjustment+',秒数:'+Seconds')
并查看产生的结果。estimated_time和estimate_time都包含小时格式的估计值。调试输出中的变量值是否与您期望的值相同?在调用
updateMainingTime
中的
UpdateTimer
之前,放置另一行
alert()
,查看
newEstim
$origTime.val()
的值。