Тема: Дивна аномалія, DOM-об'ект - undefined
Чому ось це
var elem = document.getElementsByTagName("A");
console.log(elem[0]);
виводить - "undefined", коли тегів "а" на сторінці близько десяти?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → JavaScript, TypeScript, ECMAScript → Дивна аномалія, DOM-об'ект - undefined
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Чому ось це
var elem = document.getElementsByTagName("A");
console.log(elem[0]);
виводить - "undefined", коли тегів "а" на сторінці близько десяти?
А якщо "a"?
я теж про це подумав перед створенням теми і перевірив - та ж фігня.
хмм, знаєте, що дивно, на jsfiddle все працює, а в мене на компутері - ні
http://jsfiddle.net/s2x3U/
IE детектед, нє ?
га? що то значе? той скрипт ніде не працює, ні в Хромі, ні в Моцілла, ні в IE (якщо відкривати сторінку, котра в мене на компі), але якщо це саме в інеті дивитись, то все працює
А якщо так:
<script>
window.onload = function(){
// весь код сюди
}
</script>
Також не варто використовувати console.log. До якоїсь версії "ішака" він не підтримується і здається не є стандартним.
PS
Тобто, мабуть, об’єкт console.Можна пройтися в циклі по масиву:
for (var i = elem.length - 1; i >= 0; i--) {
alert(elem[i]);
};
А якщо так:
<script> window.onload = function(){ // весь код сюди } </script>
а от так працює хД а чому так? як зробити, щоб без онлоаду працювало?
p.s. а нам викладач казав все робити тільки console.log'ом, тому що алерти вже нікому не потрібні
а от так працює хД а чому так? як зробити, щоб без онлоаду працювало?
Якщо без onload, то можна спробувати розмістити код після усіх потрібних для роботи цього скрипту HTML-елементів. А чому так? Мабуть тому що, коли JavaScript код починає виконуватися DOM для нього недоступний (точно не пам’ятаю чому).
p.s. а нам викладач казав все робити тільки console.log'ом, тому що алерти вже нікому не потрібні
Вже. Я думаю вони просто нікому не потрібні а не вже. Можна виводити повідомлення в якесь місце безспосередньо на сторінці, але це геморой.
Ось ця фігня з window.onload свого часу спричинила мені масу проблем і головного болю, бо в тих книжках які я читав про це нічого не було сказано. Щодо того чому без onload не працювало пошукай в тирнеті щоб знати.
Можна використовувати цю функцію
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) у "нормальних" браузерах.
Можна використовувати цю функцію
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>, і все запрацювало
Досить? Якось неприємно все це, так?
Правильний спосіб це використання addEventListener.
Досить? Якось неприємно все це, так?
Правильний спосіб це використання addEventListener.
да мені тре було просто розібратись з отою помилкою і все. а ви чогось такого понаписували, ми такого ще не вчили.
Це погано що не вчили. Треба "загартовуватися" так би мовити. Варто обговорити це з викладачем і провести тест його знань з предмету.
PS
Це має якийсь стосунок до домашнього завдання? У такому випадку не у вас одного мала б виникнути помилка.
Це погано що не вчили. Треба "загартовуватися" так би мовити. Варто обговорити це з викладачем і провести тест його знань з предмету.
це вам варто стримати свій запал, ми ще по плану не дійшли до подій, ми зара на пункті плану нумер десять - "Об'єктна модель арбузера та документа", а "Події. Обробка подій." буде 11 пунктом.
Коли браузер парсить 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 івент, який спрацьовує коли вся сторінка повністю завантажена.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися