Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   функция и несуществующий id (https://javascript.ru/forum/dom-window/25629-funkciya-i-nesushhestvuyushhijj-id.html)

Ankh 10.02.2012 22:34

функция и несуществующий id
 
Всем доброе время суток,
работаю c JavaScript относительно недавно и столкнулся со следующей проблемой:
Предположим, есть вот такой кусок:
Код:

window.onload = function () {
        First();
        Second();
        Third();
}

Функция First() нам не интересна, а вот функция Second():
Код:

function Second() {
        var any_value = document.getElementById('pages').getElementsByTagName('a');
        if (any_value != undefined) {
          /* какое-либо действие */
        }
}

Так вот, на одной из нескольких страниц элемента с id='pages' не существует, и функция Third() (следующая за Second()) не выполняется. То, что я балбес, я подозреваю, но в чем моя ошибка?

poorking 10.02.2012 22:38

Цитата:

Сообщение от Ankh
на одной из нескольких страниц элемента с id='pages' не существует

и тогда document.getElementById('pages') возвращает null, у которого нет методов. Но в вашем коде следом идет сразу вызов getElementsByTagName и вылетает исключение (см. консоль)

if (any_value != undefined) { - эта проверка бессмысленна, так как getElementsByTagName всегда возвращает коллекцию

Seva1986 10.02.2012 22:40

Цитата:

Сообщение от Ankh
но в чем моя ошибка?

в том что она пытаеться чтото она пытается вызвать у null, а там его не может быть. по этому ошибка, нужно проверку сделать.

function Second() {
if(!document.getElementById('pages')) return;
var any_value = document.getElementById('pages').getElementsByTagName('a');
	if (any_value != undefined) {
           /* какое-либо действие */
	}
}

Ankh 10.02.2012 23:20

Seva1986, спасибо большое!
poorking, спасибо, убрал ненужную проверку.
В итоге код принял такой вид:
Код:

if(!document.getElementById('pages')) return;
        else {
                for (var any_value= document.getElementById('pages').getElementsByTagName('a') ... ) {
                /* действие */
                }
        }

Все работает, еще раз спасибо!

poorking 10.02.2012 23:49

Ankh,
document.getElementById('pages')

Выборку почем зря два раза делать незачем. Делайте один раз

var pages = document.getElementById('pages');
if (pages) {
    for (var any_value= pages ... ) {
                /* действие */
    }
}


Часовой пояс GMT +3, время: 19:46.