JavaScript函数的间隔不为';这是我第一次上班

JavaScript函数的间隔不为';这是我第一次上班,javascript,Javascript,我希望以间隔运行函数renews(),但希望在打开html时第一次运行。所以我写了更新();但它不起作用。我可以运行代码的其他函数。但只有这一个没有。 谢谢你的帮助 <html> <head> <script> var i=0; var u=0; //0:redy for the next FX var newstext; function renews() {

我希望以间隔运行函数renews(),但希望在打开html时第一次运行。所以我写了更新();但它不起作用。我可以运行代码的其他函数。但只有这一个没有。 谢谢你的帮助

<html>
    <head>

    <script>

        var i=0;
        var u=0; //0:redy for the next FX
        var newstext;

        function renews() {

            if(i%2==0){
                newstext = "aaa";
            } else {
                newstext = "bbb";
            }
                document.getElementById("news").innerHTML = newstext;
                i++;
        }
        //renews(); // this doesn't work
        setInterval(function(){
        renews();
        },3000);
    </script>
    </head>

    <body>
        <span id ="news">test</span>
    </body>

</html>

var i=0;
var u=0//0:下一个FX的红色
新闻文本;
函数更新(){
如果(i%2==0){
newstext=“aaa”;
}否则{
newstext=“bbb”;
}
document.getElementById(“news”).innerHTML=新闻文本;
i++;
}
//续订();//这不管用
setInterval(函数(){
更新();
},3000);
测试

将脚本移动到正文底部。执行脚本时,DOM尚未生成,因此没有可操作的元素。

处理DOM时,必须在页面完全加载后执行代码。如果你不这样做,DOM很有可能不会 在代码执行时创建

现在让我们考虑一下代码运行时发生了什么。您将js代码放在页面的header标记中,因此它在浏览器看到页面其余部分之前就开始执行。这是一个大问题,因为id为“news”的span元素还不存在

到底发生了什么?对getElementById的调用返回null而不是您想要的元素,从而导致错误,而浏览器作为一种良好的运动,只是继续移动并呈现页面,但在第一次没有更改DOM

你怎么解决这个问题?好吧,你可以把代码移到正文的底部,但是实际上有一种更简单的方法来确保代码在正确的时间运行告诉浏览器“在完全加载页面并创建DOM后运行我的代码”的方法。除了将代码移到正文底部之外,还有另一种更干净的方法可以使用代码

它的工作原理如下:首先创建一个包含所需代码的函数 在页面完全加载后执行。完成后,你就可以 窗口对象,并将函数分配给其onload属性。窗口对象将调用您分配给其onload属性的任何函数,但只有在页面完全加载之后。看看这个:-

<html>
<head>

<script>

    var i=0;
    var u=0; //0:redy for the next FX
    var newstext;

    function renews() {

        if(i%2==0){
            newstext = "aaa";
        } else {
            newstext = "bbb";
        }
            document.getElementById("news").innerHTML = newstext;
            i++;
    }
    //renews(); // this doesn't work
    window.onload = renews; //But this will work
    setInterval(function(){
    renews();
    },3000);
</script>
</head>

<body>
    <span id ="news">test</span>
</body>

var i=0;
var u=0//0:下一个FX的红色
新闻文本;
函数更新(){
如果(i%2==0){
newstext=“aaa”;
}否则{
newstext=“bbb”;
}
document.getElementById(“news”).innerHTML=新闻文本;
i++;
}
//续订();//这不管用
window.onload=续订//但这会奏效的
setInterval(函数(){
更新();
},3000);
测试


现在,即使您将JavaScript代码放在一个单独的JS文件中,并将其导入头标记中,而不是将其移动到正文的末尾,您的代码也可以正常工作。

您所说的“不工作”到底是什么意思?可能是重复的。经典错误:DOM尚未加载,因此您无法访问
document.getElementById(“news”)
@Xufox这不是一个重复的问题。重复是由问题而不是答案决定的。请尝试将您的代码放在
body
标记下面,这可能意味着DOM元素没有呈现Yet请观看此视频:,因为您做得不对。此函数在超时情况下运行。它可能还没有被解析,但是对于这样一个最小的页面,假设元素在3秒超时后被解析是安全的。是的,但是当我读到这个问题时,问题是它在3秒后才运行…@rlemon问题中有一行被注释掉了。这是一行不起作用的代码,当时DOM还没有加载。它现在起作用了!非常感谢大家。那个么这是否意味着若JavaScript是分开的文件,那个么我总是应该将JavaScript加载放在html的主体之后?