3

私はこのサンプルドキュメントを持っています:

<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>

myFuncのコールバックである場合、なぜ「要素」がnullになるのdocument.body.onloadですか?

代わりに、スクリプトが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全体を使用する必要があるかどうかです。なぜ私はすべきではないのですか?

4

2 に答える 2

2

問題は、関数をすぐに呼び出している(そしてその戻り値を割り当てている)ことです。

代わりに関数を割り当てると、機能します。

document.body.onload = myFunc;

var elementまた、グローバル変数の作成を回避するために関数で使用する必要があります。


または、人々を混乱させたい場合:

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

しかし、そうしないでください。ここでは意味がありません。;)

于 2012-04-25T21:53:03.087 に答える
0

代わりにこれを使用してください

document.body.onload = myFunc;

または

document.body.onload = function() {
    myFunc();
};
于 2012-04-25T21:52:19.117 に答える