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;

您拥有的代码调用getSpanElements函数并将其返回值分配为 onload 事件处理程序。

于 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

您必须将对该函数的引用分配getSpanElementswindow.onload- 目前,该函数不会被执行onload,而是在解析后立即执行。

您实际分配的是未定义的返回值。

简而言之:放弃().

于 2009-10-27T22:06:58.933 回答
0

我认为该window对象是在解析任何实际元素之前创建的。

于 2009-10-27T22:01:45.980 回答