1

Тема: Дивна аномалія, DOM-об'ект - undefined

Чому ось це

var elem = document.getElementsByTagName("A");
console.log(elem[0]);

виводить - "undefined", коли тегів "а" на сторінці близько десяти?

2

Re: Дивна аномалія, DOM-об'ект - undefined

А якщо "a"?

3

Re: Дивна аномалія, DOM-об'ект - undefined

Bartash написав:

А якщо "a"?

я теж про це подумав перед створенням теми і перевірив - та ж фігня.

4

Re: Дивна аномалія, DOM-об'ект - undefined

Файл в студію.

5

Re: Дивна аномалія, DOM-об'ект - undefined

хмм, знаєте, що дивно, на jsfiddle все працює, а в мене на компутері - ні
http://jsfiddle.net/s2x3U/

Re: Дивна аномалія, DOM-об'ект - undefined

IE детектед, нє ?

7

Re: Дивна аномалія, DOM-об'ект - undefined

Hanter написав:

IE детектед, нє ?

га? що то значе? той скрипт ніде не працює, ні в Хромі, ні в Моцілла, ні в IE (якщо відкривати сторінку, котра в мене на компі), але якщо це саме в інеті дивитись, то все працює

8 Востаннє редагувалося Invader (25.12.2013 20:59:59)

Re: Дивна аномалія, DOM-об'ект - undefined

А якщо так:

<script>
window.onload = function(){
    // весь код сюди
}
</script>

Також не варто використовувати console.log. До якоїсь версії "ішака" він не підтримується і здається не є стандартним.
PS
Тобто, мабуть, об’єкт console.Можна пройтися в циклі по масиву:

for (var i = elem.length - 1; i >= 0; i--) {
    alert(elem[i]);
};
Подякували: FakiNyan1

9 Востаннє редагувалося FakiNyan (25.12.2013 21:03:50)

Re: Дивна аномалія, DOM-об'ект - undefined

Invader написав:

А якщо так:

<script>
window.onload = function(){
    // весь код сюди
}
</script>

а от так працює хД а чому так? як зробити, щоб без онлоаду працювало?
p.s. а нам викладач казав все робити тільки console.log'ом, тому що алерти вже нікому не потрібні

10

Re: Дивна аномалія, DOM-об'ект - undefined

а от так працює хД а чому так? як зробити, щоб без онлоаду працювало?

Якщо без onload, то можна спробувати розмістити код після усіх потрібних для роботи цього скрипту HTML-елементів. А чому так? Мабуть тому що, коли JavaScript код починає виконуватися DOM для нього недоступний (точно не пам’ятаю чому).

p.s. а нам викладач казав все робити тільки console.log'ом, тому що алерти вже нікому не потрібні

Вже. Я думаю вони просто нікому не потрібні а не вже. Можна виводити повідомлення в якесь місце безспосередньо на сторінці, але це геморой.

11

Re: Дивна аномалія, DOM-об'ект - undefined

Ось ця фігня з window.onload свого часу спричинила мені масу проблем і головного болю, бо в тих книжках які я читав про це нічого не було сказано. Щодо того чому без onload не працювало пошукай в тирнеті щоб знати.

Подякували: FakiNyan1

12

Re: Дивна аномалія, DOM-об'ект - undefined

Можна використовувати цю функцію

function addEventHandler(obj, eventName, handler) {
    if (document.addEventListener) {
        obj.addEventListener(eventName, handler, false);
    } else if (document.attachEvent) {
        obj.attachEvent('on' + eventName, handler); }
}

і писати тоді вже так:

addEventHandler(window,'load',function(e){
// код
}

або просто addEventListener('load',function(){/* code here */},false) у "нормальних" браузерах.

13

Re: Дивна аномалія, DOM-об'ект - undefined

Invader написав:

Можна використовувати цю функцію

function addEventHandler(obj, eventName, handler) {
    if (document.addEventListener) {
        obj.addEventListener(eventName, handler, false);
    } else if (document.attachEvent) {
        obj.attachEvent('on' + eventName, handler); }
}

і писати тоді вже так:

addEventHandler(window,'load',function(e){
// код
}

або просто addEventListener('load',function(){/* code here */},false) у "нормальних" браузерах.

досить цього... я просто підключив той скрипт в кінці коду, перед </html>, і все запрацювало

14

Re: Дивна аномалія, DOM-об'ект - undefined

Досить? Якось неприємно все це, так?
Правильний спосіб це використання addEventListener.

15

Re: Дивна аномалія, DOM-об'ект - undefined

Invader написав:

Досить? Якось неприємно все це, так?
Правильний спосіб це використання addEventListener.

да мені тре було просто розібратись з отою помилкою і все. а ви чогось такого понаписували, ми такого ще не вчили.

16 Востаннє редагувалося Invader (25.12.2013 22:00:42)

Re: Дивна аномалія, DOM-об'ект - undefined

Це погано що не вчили. Треба "загартовуватися" так би мовити. Варто обговорити це з викладачем і провести тест його знань з предмету.

PS
Це має якийсь стосунок до домашнього завдання? У такому випадку не у вас одного мала б виникнути помилка.

17

Re: Дивна аномалія, DOM-об'ект - undefined

Invader написав:

Це погано що не вчили. Треба "загартовуватися" так би мовити. Варто обговорити це з викладачем і провести тест його знань з предмету.

це вам варто стримати свій запал, ми ще по плану не дійшли до подій, ми зара на пункті плану нумер десять - "Об'єктна модель арбузера та документа", а "Події. Обробка подій." буде 11 пунктом.

18

Re: Дивна аномалія, DOM-об'ект - undefined

Коли браузер парсить HTML сторінку то він поступово читає всі теги від початку і промальовує сторінку. А коли натрапляє на тег <script> то зупиняє промальовувати сторінку поки не виконає javascript код. І може таке бути, що код виконується, шукає елементи, а DOM елементів фактично ще ж немає.

Тут скрипт підключений у <head> секції.

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
</head>

Коли браузер його виконує, то він ще і не брався за тег <body> з усім вмістом сторінки, сторінка просто порожня. Тому хорошою практикою є розміщувати скрипти перед закриваючим тегом </body>. Браузер сформує DOM а тоді візьметься за скрипти. І навіть тоді може ще довантажуватися якийсь контент, наприклад <img> тег вже вставлений на сторінку, а картинка у ньому ще завантажується. Можна прослуховувати window.onload івент, який спрацьовує коли вся сторінка повністю завантажена.