Javascript计时器不工作..

时间:2016-01-13 22:46:40

标签: javascript jquery html ajax timer

这是我的代码,请告诉我我在哪里犯了错误,以便我可以从中学习并希望它能够正常运行:)。

这是html:

<input type="text" id="txt" />
<input type="button" value="Start Timer" onclick="startTimer()" />

这是javascript:

var  Timer = 120;
var checkTimer = false;
var t;

function  countDown(){
doucment.getElementById("txt").value = Timer;
Timer--;
t = setTimeout("countDown();", 1000);
}

function startTimer(){
if(!checkTimer){
checkTimer = true;
countDown();
}

else{
console.log("Error!");
}

}

2 个答案:

答案 0 :(得分:0)

在此Fiddle

中查看您的代码

让我偶然发现了一些事情,

  1. 找不到startTimer()中的onclick
  2. doucment!== document正如Sterling Archer
  3. 所指出的那样
  4. 字符串eval可以更改为Sterling Archer
  5. 指出的t = setTimeout(countDown, 1000);

    现在让我们来解决。

    <强> HTML

    <input type="text" id="txt" />
    <!-- Removed the onclick attribute and added an ID for the eventListener -->
    <input type="button" value="Start Timer" id="start" />
    

    <强> JS

    //Event listener for the button. Same as the onClick, this one, however, does work.
    document.getElementById("start").addEventListener("click", startTimer, false);
    
    var Timer = 120;
    var checkTimer = false;
    var t;
    
    function countDown() {
      document.getElementById("txt").value = Timer;
      Timer--;
      t = setTimeout(countDown, 1000);
    }
    
    function startTimer() {
      if (!checkTimer) {
        checkTimer = true;
        countDown();
      } else {
        console.log("Error!");
      }
    
    }
    

    我所做的是:

    • 我添加了一个事件监听器来对抗startTimer()&#34;无法找到&#34;错误
    • 我已将doucment更改为document
    • 我已将您的字符串评估更改为t = setTimeout(countDown, 1000);

    希望这有帮助!

答案 1 :(得分:-3)

你有一个错字。您应该document.getElementById("txt")而不是doucment.getElementById("txt")。试试这个:

var Timer = 120;
var checkTimer = false;
var t;

function countDown() {
  document.getElementById("txt").value = Timer;
  Timer--;
  t = setTimeout("countDown();", 1000);
}

function startTimer() {
  if (!checkTimer) {
    checkTimer = true;
    countDown();
  } else {
    console.log("Error!");
  }

}

<强>更新 如果您希望定时器停止为零,则需要在再次递减计时器之前添加if语句以查看定时器是否大于0。这看起来像这样:

<强> HTML:

<input type="text" id="txt" />
<input type="button" value="Start Timer" onclick="startTimer()" />    

<强> JS:

var Timer = 120;
var checkTimer = false;
var t;

function countDown() {
  document.getElementById("txt").value = Timer;
  if (Timer > 0){
    Timer--;
  }
  t = setTimeout("countDown();", 1000);
}

function startTimer() {
  if (!checkTimer) {
    checkTimer = true;
    countDown();
  } else {
    console.log("Error!");
  }
}

演示:https://jsfiddle.net/hopkins_matt/moks2oyb/

可以对此代码进行进一步改进,但这是为了说明一旦错误得到修复,您的代码就会起作用。