window.onload! = <body onload = ""> - PullRequest
       22

window.onload! = <body onload = "">

1 голос
/ 28 октября 2009

Это довольно интересно, я думаю. Рассмотрим следующий код: и 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 ]

11 голосов
/ 28 октября 2009

Вы неправильно настроили функцию:

window.onload = getSpanElements();

должно быть

window.onload = getSpanElements;

В данный момент вы устанавливаете обработчик загрузки для возвращаемого значения getSpanElements ().

10 голосов
/ 28 октября 2009
window.onload = getSpanElements();

должно быть

window.onload = getSpanElements;

Код, который у вас есть , вызывает функцию getSpanElements и назначает возвращаемое значение в качестве обработчика события загрузки.

3 голосов
/ 28 октября 2009

Вы ошибаетесь, делая это:

window.onload = getSpanElements();

, который устанавливает window.onload в результате вызова функции getSpanElements (не определено).

Вы должны сделать это вместо:

window.onload = getSpanElements;
2 голосов
/ 28 октября 2009

Возможно, вы захотите переместить ваше назначение 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.

1 голос
/ 28 октября 2009

Вы должны присвоить ссылку функции getSpanElements на window.onload - в настоящее время функция выполняется не onload, а сразу после синтаксического анализа.

На самом деле вы присваиваете неопределенное возвращаемое значение.

Короче говоря: сбросить ().

0 голосов
/ 28 октября 2009

Я думаю, что объект window создается до того, как будут проанализированы какие-либо фактические элементы.

...