为什么element.innerHTML =带日期信息的字符串不起作用?

时间:2017-07-21 15:33:51

标签: javascript setinterval

我在使用setInterval()

时遇到过这个问题
var h1 = document.getElementById("demo");

function updateTime(d) {

  h1.innerHTML = "numero del mese: " + d.getDate() +
    "<br>numero della settimana: " + d.getDay() +
    "<br>anno: " + d.getFullYear() +
    "<br>mese: " + d.getMonth() +
    "<br>ore: " + d.getHours() +
    "<br>minuti: " + d.getMinutes() +
    "<br>secondi: " + d.getSeconds();
}

setInterval(updateTime.bind(null, new Date()), 1000);

所有这些都能正常工作,但它只能工作一次。 为什么呢?

3 个答案:

答案 0 :(得分:3)

new Date()创建一个Date对象,表示创建对象的时间

您只需拨打一次,然后在每隔一段显示该时间(不会改变)的时间间隔内使用它。

如果您想获得当前时间,那么您需要在间隔中调用的函数中创建一个新的Date对象

例如:

setInterval(function () { updateTime(new Date()); }, 1000);

答案 1 :(得分:2)

新的Date对象创建一次,并且您在每个函数调用中使用相同的对象。因此,每次通话时日期都不会改变。

您需要在函数内部创建新的Date对象,以便每次调用函数时都会创建它,从而更新时间。

检查以下代码段:

var h1 = document.getElementById("demo");

function updateTime() {
  var d = new Date();
      
  h1.innerHTML = "numero del mese: " + d.getDate() +
    "<br>numero della settimana: " + d.getDay() +
    "<br>anno: " + d.getFullYear() +
    "<br>mese: " + d.getMonth() +
    "<br>ore: " + d.getHours() +
    "<br>minuti: " + d.getMinutes() +
    "<br>secondi: " + d.getSeconds();
}

setInterval(updateTime, 1000);
<div id="demo"></div>

答案 2 :(得分:0)

这是因为您使用.bind(null, new Date())。因此,对于每个未来的呼叫,它与最初创建的日期相同。我建议在每个时间间隔内调用new Date()以获取当前时间。见下文。

    var h1 = document.getElementById("demo");

    function updateTime() {
      let d = new Date();
      
      h1.innerHTML = "numero del mese: " + d.getDate() +
        "<br>numero della settimana: " + d.getDay() +
        "<br>anno: " + d.getFullYear() +
        "<br>mese: " + d.getMonth() +
        "<br>ore: " + d.getHours() +
        "<br>minuti: " + d.getMinutes() +
        "<br>secondi: " + d.getSeconds();
    }

    setInterval(updateTime, 1000);
<h1 id="demo"></h1>