window.onload!=

时间:2009-10-27 21:59:58

标签: javascript collections onload

我觉得这很有意思。考虑以下代码,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报告它没有成员。有什么想法吗?

6 个答案:

答案 0 :(得分:11)

您正在设置错误的功能:

window.onload = getSpanElements();

应该是

window.onload = getSpanElements;

您现在将onload处理程序设置为getSpanElements()的返回值。

答案 1 :(得分:10)

window.onload = getSpanElements();

应该是

window.onload = getSpanElements;

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

答案 2 :(得分:3)

你错误地这样做了:

window.onload = getSpanElements();

window.onload设置为函数getSpanElements(未定义)的调用结果。

你应该这样做:

window.onload = getSpanElements;

答案 3 :(得分: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。

答案 4 :(得分:1)

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

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

简而言之:放弃()

答案 5 :(得分:0)

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