代码之家  ›  专栏  ›  技术社区  ›  commander666

为什么是元素。innerHTML=包含日期信息的字符串不起作用?

  •  0
  • commander666  · 技术社区  · 9 年前

    我遇到了这个问题 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 回复  |  直到 9 年前
        1
  •  3
  •   Quentin    9 年前

    new Date() 创建日期对象,表示

    你调用它一次,然后在显示时间的间隔内使用它( 这不会改变 )每一秒。

    如果你想得到 现在的 在…内 在间隔上调用的函数。

    例如:

    setInterval(function () { updateTime(new Date()); }, 1000);
    
        2
  •  2
  •   Munawir    9 年前

    新的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>
        3
  •  0
  •   SVSchmidt    9 年前

    那是因为你使用 .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>