2

これはかなり興味深いと思います。次のコードを検討してください。window.onload と body onload="" の両方が同じ関数を呼び出します。ただし、結果は異なります。window.onload にはコレクションに問題があるようです。コードは次のとおりです。

<html>
<script type="text/javascript">

    window.onload = getSpanElements();

    function getSpanElements(){
        var collectionBoolean = document.getElementsByTagName("span")?true:false;
        alert(
            "collection exists? " + collectionBoolean + "; number of collection members: " + document.getElementsByTagName("span").length
        );
    }


</script>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Untitled Document</title>
</head>
<body onload="getSpanElements()">
    <span> test </span>
</body>

ご覧のとおり、どちらもコレクションが存在することを報告していますが、window.onload はメンバーがないと報告しています。何か案は?

4

6 に答える 6

11

関数の設定が間違っています:

window.onload = getSpanElements();

する必要があります

window.onload = getSpanElements;

現時点では、onload ハンドラーを getSpanElements() の戻り値に設定しています。

于 2009-10-27T22:05:46.987 に答える
10
window.onload = getSpanElements();

する必要があります

window.onload = getSpanElements;

作成したコードは関数を呼び出し、その戻り値を onload イベント ハンドラーとしてgetSpanElements割り当てます。

于 2009-10-27T22:04:31.980 に答える
3

あなたはこれを間違ってやっています:

window.onload = getSpanElements();

window.onloadを関数呼び出しの結果に設定しますgetSpanElements(未定義)。

代わりにこれを行う必要があります。

window.onload = getSpanElements;
于 2009-10-27T22:06:22.553 に答える
2

window.onload 割り当てを getSpanElements 宣言の下に移動することをお勧めします。

<html>
<script type="text/javascript">


        function getSpanElements(){
                var collectionBoolean = document.getElementsByTagName("span")?true:false;
                alert(
                        "collection exists? " + collectionBoolean + "; number of collection members: " + document.getElementsByTagName("span").length
                );
        }

        window.onload = getSpanElements;

</script>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Untitled Document</title>
</head>
<body onload="getSpanElements()">
        <span> test </span>
</body>

コード内で window.onload イベント ハンドラを割り当てている時点では、getSpanElements() はまだ定義されていません。また、行は

window.onload=getSpanElements;

いいえ

window.onload=getSpanElements();

括弧のない関数名は、関数への参照です。括弧を付けて関数を実行し、戻り値を window.onload に代入します。

于 2009-10-27T22:05:34.817 に答える
1

getSpanElements関数への参照をに割り当てる必要がありますwindow.onload-現在、関数は実行されませんがonload、解析の直後に実行されます。

実際に割り当てるのは、未定義の戻り値です。

要するに:をドロップし()ます。

于 2009-10-27T22:06:58.933 に答える
0

window実際の要素が解析される前にオブジェクトが作成されると思います。

于 2009-10-27T22:01:45.980 に答える