[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: document.getElementById('sb') возвращает null
vn214
Не работает такой скрипт, в фаербаг пишет что возвращается null

var x = document.getElementById('sb');

var y = x.clientHeight;

alert('y='+y);


Посмотрел в сети описание такой ситуации.
Есть несколько вариантов
Проблема сводиться в кодировке js файла - должна быть utf-8.
Но у файла кодировка - utf-8.

Или в структуру DOM документа. JS - не находит объекта с таким id.
Используется Smarty

<!-- index.tpl-->
{*Smarty*}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> </title>

<link
rel="stylesheet" type="text/css" href="skins/css/style.css"/>
<script
type="text/javascript" src="./js/heigthdiv.js"></script>
</head>
<body>



<!--переключатель страниц-->
{include file="header.tpl"}

{if $page == 'main'}

{include file="main.tpl"}

{elseif $page == 'second'}

{include file="second.tpl"}

... и т.д.

{/if}

<div id = "footer" class="ieroundbox"> </div>


</body>

</html>



файл main.tpl


<div id="content" class="ieroundbox">

<div
id="sb" >
....
....
</div>

<div
id="text" class="ieroundbox">

</div>


</div>







Спустя 6 часов, 28 минут, 44 секунды (8.02.2011 - 06:34) fon написал(а):
Цитата
Или в структуру DOM документа. JS - не находит объекта с таким id.

скорей всего именно это и происходит, наверно ты обращаешься к ещё не загруженному документу или ИД не существует, регистр или буковка русская попала....



Спустя 15 часов, 20 минут, 39 секунд (8.02.2011 - 21:55) vn214 написал(а):
Цитата (fon @ 8.02.2011 - 06:34)
Цитата
Или в структуру DOM документа. JS - не находит объекта с таким id.

скорей всего именно это и происходит, наверно ты обращаешься к ещё не загруженному документу или ИД не существует, регистр или буковка русская попала....

id существует.Есть див с таким id .
Регистр один.
Русских букв нет.


если скрипт перенести ниже, то работает.
Но насколько это корректно.
Как понимаю, скрипт будет выполнятся после загрузки страницы.
Если результат работы скрипта нужен будет раньше?!


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> </title>
<link
rel="stylesheet" type="text/css" href="skins/css/style.css"/>
</head>
<body>


<!--переключатель страниц-->
{include file="header.tpl"}

{if $page == 'main'}

...

{/if}

<div id = "footer" class="ieroundbox"> </div>

<script
type="text/javascript" src="./js/heigthdiv.js"></script>

</body>

</html>




Спустя 13 минут, 18 секунд (8.02.2011 - 22:08) sergeiss написал(а):
А когда ты пытаешься запустить код, который не работает? Этого места не видно в общем коде и ты не описал.

Спустя 2 минуты, 22 секунды (8.02.2011 - 22:11) Slays написал(а):
тебе не очевидно, что ты обращаешься к диву, который еще не загрузился в DOM на момент обращения, а когда переносишь ниже, то естественно документ подгружается сверху вниз и уже этот див подгружается ? Помести свой JS в window.onload и проблем не будет

Какой результат тебе нужен до загрузки документа, если ты работаешь с элементами этого документа ? Не выдумывай =)

Спустя 56 минут, 56 секунд (8.02.2011 - 23:07) vn214 написал(а):
Цитата (sergeiss @ 8.02.2011 - 22:08)
А когда ты пытаешься запустить код, который не работает? Этого места не видно в общем коде и ты не описал.

Имел ввиду код изменения высоты дивов.
Но код работает и при использовании widow.onload,и
если код скрипта расположить внизу страницы.

Хотя иногда заметно изменение высоты дива - очевидно js отрабатывает после загрузки страницы ?!


var sb = document.getElementById('sb').clientHeight;

document.getElementById('twoid').style.height = sb+'px';


Спустя 22 минуты, 18 секунд (8.02.2011 - 23:30) Slays написал(а):
"Но код работает и при использовании widow.onload,и
если код скрипта расположить внизу страницы"

перечитай еще раз что я тебе написал, естественно так будет работать, потому что в обоих этих случаях JS обращается к уже загруженному в DOM элементу, а в твоем случае НЕТ.

"очевидно js отрабатывает после загрузки страницы ?!"

очевидно window.onload и указывает, что JS должен отработать после загрузки страницы, ты это явно указываешь мол "включайся после загрузки страницы", а потом спрашиваешь "JS чо после загрузки страницы работает чтоли ??"

А КАК ТЫ ХОЧЕШЬ ПО ДРУГОМУ ВАЩЕ ???
Хочу чтобы блок которого еще нет изменил высоту, ээээй, почему ошибка, почему блока нет, памагите 8(
Нельзя надуть шарик, которого у тебя нет, окей ? Нельзя блинчики похавать, пока ты еще не заморочился их купить или приготовить.
я.блинчики_готовы = {похавать}
ок?
но никак не
я.блинчиков_еще_нет = {похавать}

почему блинчики null, я же нажал похавать, вааа

Ты будто не слушаешь никого или понять не пытаешься
user posted image

Спустя 7 часов, 38 минут, 34 секунды (9.02.2011 - 07:08) fon написал(а):
Цитата
Ты будто не слушаешь никого или понять не пытаешься


Во во, я сразу сказал, что нет ещё элемента на момент обращения.

Хотя с таким все по началу сталкивались, пока сам не въедешь, не понятно почему не работает.

Спустя 2 часа, 8 минут, 37 секунд (9.02.2011 - 09:17) sergeiss написал(а):
Slays - про блинчики красивую аналогию привел smile.gif

Спустя 3 дня, 14 часов, 8 минут, 56 секунд (12.02.2011 - 23:26) vn214 написал(а):
Если код немного изменить
 

window.onload = heigthDiv();

function heigthDiv() {
// код изменения высоты дива
}

то получается
document.getElementById("sb").offsetHeight is null

То есть див не загрузился в DOM. (и js и его не находит).

Что здесь изменилось?

Спустя 10 часов, 58 минут, 2 секунды (13.02.2011 - 10:24) Slays написал(а):
скобки убери, иначе ты не присваиваешь функцию событию, а вызываешь при чтении этой сроки кода
window.onload = heigthDiv;

Спустя 5 дней, 8 часов, 47 минут, 31 секунда (18.02.2011 - 19:11) Dron19 написал(а):

window.onload = function () {
var x = document.getElementById('sb');
var y = x.clientHeight;
alert('y='+y);
}


_____________
Спартак - чемпион
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.