Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Не работает getElementById


Автор: LuLok 16.9.2008, 10:08
Есть код:
Код

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
        <script type="text/javascript" src="../scripts/calendar.js"></script>
        <script type="text/javascript" src="../styles/calendar/lang/calendar-ru_win_.js"></script>
        <script type="text/javascript" src="../scripts/calendar-setup.js"></script>
        <script type="text/javascript">
            /**Парсит дату в формате yyyy-mm-dd
             *param date дата в требуемом формате
             *return отформатированную дату в миллисекуднах*/
            function parseDate(date) {
                var regexp = /(.*)-(.*)-(.*)/i;
                var array = date.match(regexp);
                var y = array[1];
                var m = array[2];
                var d = array[3];
                return Date.UTC(y, m, d, 0, 0, 0, 0);
            }
            /**Возвращает сегодняшнюю дату в формате yyyy-mm-dd*/
            function getTodayDateInFormat() {
                var date = new Date();
                var y = date.getFullYear();
                var m = date.getMonth() + 1;
                var d = date.getDate();
                var str = y.toString() + "-" + m.toString() + "-" + d.toString();
                return str;
            }
            /**Возвращает сегодняшнюю дату в миллисекундах*/
            function getTodayDateInMillis() {
                var date = new Date();
                var y = date.getFullYear();
                var m = date.getMonth();
                var d = date.getDate();
                return Date.UTC(y, m, d, 0, 0, 0, 0);
            }
            /**Парсит URL, извлекает из него значение начальной даты и возвращает ее в миллисекундах*/
            function getStartDate() {
                var url = document.URL;
                var regexp = /d1=(.*)&/i;
                var array = url.match(regexp);
                if(array != null) {
                    window.document.getElementById("ttt").value = array[1].toString();
                    return parseDate(array[1]);
                } else {
                    window.document.getElementById("ttt").value = getTodayDateInFormat();
                    return getTodayDateInMillis();
                }
            }
            /**Парсит URL, извлекает из него значение конечной даты и возвращает ее в миллисекундах*/
            function getEndDate() {
                var url = document.URL;
                var regexp = /d2=(.*)/i;
                var array = url.match(regexp);
                if(array != null) {
                    window.document.getElementById("ttt2").value = array[1].toString();
                    return parseDate(array[1]);
                } else {
                    window.document.getElementById("ttt2").value = getTodayDateInFormat();
                    return getTodayDateInMillis();
                }
            }
        </script>
        <link rel="stylesheet" type="text/css" media="all" href="../styles/skins/calendar-blue2.css" />
    </head>
    <body>
        <div style="font-family:arial;font-size:11px;">Начиная с:</div>
        <div id="calendar-container">
            <script type="text/javascript">
                function dateChanged(calendar) {
                    // Beware that this function is called even if the end-user only
                    // changed the month/year.  In order to determine if a date was
                    // clicked you can use the dateClicked property of the calendar:
                    if (calendar.dateClicked) {
                        // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
                        var y = calendar.date.getFullYear();
                        var m = calendar.date.getMonth() + 1;     // integer, 0..11
                        var d = calendar.date.getDate();      // integer, 1..31
                        // redirect...
                        window.document.getElementById("ttt").value = y + "-" + m + "-" + d;
                    }
                };

                Calendar.setup(
                {
                    ifdate : "%Y-%m-%d",
                    flat         : "calendar-container", // ID of the parent element
                    flatCallback : dateChanged,           // our callback function
                    firstDay : 1,                       //first day is monday
                    date : getStartDate()
                }
            );
            </script>
        </div><br />
        <div style="font-family:arial;font-size:11px;">Заканчивая:</div>
        <div id="calendar-container_2">
            <script type="text/javascript">
                function dateChanged(calendar) {
                    // Beware that this function is called even if the end-user only
                    // changed the month/year.  In order to determine if a date was
                    // clicked you can use the dateClicked property of the calendar:
                    if (calendar.dateClicked) {
                        // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
                        var y = calendar.date.getFullYear();
                        var m = calendar.date.getMonth() + 1;     // integer, 0..11
                        var d = calendar.date.getDate();      // integer, 1..31
                        // redirect...
                        window.document.getElementById("ttt2").value = y + "-" + m + "-" + d;
                    }
                };

                Calendar.setup(
                {
                    ifdate : "%Y-%m-%d",
                    flat         : "calendar-container_2", // ID of the parent element
                    flatCallback : dateChanged,           // our callback function
                    firstDay : 1,                          //first day is monday
                    date: getEndDate()
                }
            );
            </script>
        </div>
        <form>
            <input type="hidden" name="date" id="ttt" value="" />
            <input type="hidden" name="date_2" id="ttt2" value="" />
        </form>
    </body>
</html>


при загрузке страницы мне выдается ошибка:
Код

Uncaught TypeError: Cannot set property 'value' of null file:///C:/Users/../web/zones/calendar.html (line 44)
Uncaught TypeError: Cannot set property 'value' of null file:///C:/Users/../web/zones/calendar.html (line 57)


Это происходит во всех браузерах (Мозила, ИЕ, Хром).. Помогите понять в чем проблема! Спасибо! smile 

Автор: LuLok 16.9.2008, 10:39
Проблему решил переместив строки 121-124 в начало тэга body.. Может ктонибудь объяснить почему так происходит???

Автор: whyte 16.9.2008, 11:02
Это происходит потому, что код javascript начинает выполнятся со строки 81, когда объекты с id=ttt и id=ttt2 еще не созданы.

Автор: LuLok 16.9.2008, 11:27
Я так и думал, хотя это и странно конечно. Все равно спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)