JavaScript 加载和 DOM

标签 javascript dom onload-event

我有这个示例文档:

<html>
    <body>
        <script type="text/javascript">
            document.body.onload = myFunc();

            function myFunc() {
                element = document.getElementById('myDiv');
                element.innerHTML = 'Hello!';
            }
        </script>
        <div id="myDiv"></div>
    </body>
</html>

如果 myFuncdocument.body.onload 的回调,为什么 'element' 为空?

相反,如果将脚本插入到 div 之后,它会起作用:

<html>
    <body>
        <div id="myDiv"></div>
        <script type="text/javascript">
            document.body.onload = myFunc();

            function myFunc() {
                element = document.getElementById('myDiv');
                element.innerHTML = 'Hello!';
            }
        </script>
    </body>
</html>

我的问题是:如果我在处理程序函数中使用 onload 事件,我是否应该拥有整个 DOM?我为什么不呢?

最佳答案

问题是您正在立即调用该函数(并分配其返回值)。

改为分配函数,它将起作用:

document.body.onload = myFunc;

您还应该在函数中使用 var element 以避免创建全局变量。


或者如果你想迷惑别人:

document.body.onload = myFunc();
function myFunc() {
    return function() {
        var element = document.getElementById('myDiv');
        element.innerHTML = 'Hello!';
    };
}

但让我们不要那样做。这里没有意义。 ;)

关于JavaScript 加载和 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324352/

相关文章:

javascript - Backbone.js - 如何将非状态 "event"从一个 View 发送到另一个 View ?

javascript - 将鼠标悬停在 div 上会触发 div,如果悬停在该 div 上,该 div 将保留

javascript - Php 表单不起作用,作为 2 个单独的页面工作,但不是 1 个合并的页面

javascript - 如何点击元素(对于整个文档)?

reactjs - react : how can I call a function when a component has loaded?

java - 在按下按钮之前运行一个方法,例如 document.ready 函数

javascript - Angular 2 Fusion Chart 集成

html - 如何仅通过正 tabindex 导航

javascript - AngularJS 没有 "bootstrap"新的 DOM 元素

javascript - 获取脚本标签评估的进度?