Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему ява-скрипт учебники рекомендуют включать в тег head страницы ?
 
 автор: coloboc66   (22.09.2010 в 12:43)   письмо автору
 
 

Ведь вот так не работает:
<head>
<script>
document.getElementById('test').innerHTML='Hi!';
</script>
</head>
<body>
<div id='test'></div>

А так работает:
<head>
</head>
<body>
<div id='test'></div>
<script>
document.getElementById('test').innerHTML='Hi!';
</script>

  Ответить  
 
 автор: psychomc   (22.09.2010 в 12:53)   письмо автору
 
   для: coloboc66   (22.09.2010 в 12:43)
 

вот так будет работать.

<head>
</head>
<body onload="document.getElementById('test').innerHTML='Hi!';">
<div id='test'></div>


и вот так будет работать

<head>
<script>
function hi() {
   document.getElementById('test').innerHTML='Hi!';
}
</script>
</head>
<body>
<div id='test'></div>
<script>
hi();
</script>


в <head> не работает, потому что документ еще не загрузился и элемент с id=test не найден
правильно понимайте прочитанное, и вопросы отпадут сами собой

  Ответить  
 
 автор: coloboc66   (22.09.2010 в 12:57)   письмо автору
 
   для: psychomc   (22.09.2010 в 12:53)
 

Но с функциями будет работать в любом месте страницы. Поэтому получается, что удобнее скрипт включать не в верх страницы, а в её низ. Так получается универсальней. Вот я и спрашиваю: "Почему рекомендуют скрипт вставлять в верх, а не в низ"??? Вниз-то универсальней.

  Ответить  
 
 автор: psychomc   (22.09.2010 в 13:09)   письмо автору
 
   для: coloboc66   (22.09.2010 в 12:57)
 

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


<head>
</head>
<body>
<div id='test'></div>
<script>
hi();
</script>

<script>
function hi() {
   document.getElementById('test').innerHTML='Hi!';
}
</script>

  Ответить  
 
 автор: coloboc66   (22.09.2010 в 14:03)   письмо автору
 
   для: psychomc   (22.09.2010 в 13:09)
 

Я веду речь о нахождении скриптов в одном общем блоке, ограниченном <script> и </script>. Так вот такой скрипт, находясь внизу, будет работать всегда, а находясь вверху (над html-элементами) - не всегда. Или я не прав?

  Ответить  
 
 автор: psychomc   (22.09.2010 в 14:17)   письмо автору
 
   для: coloboc66   (22.09.2010 в 14:03)
 

да, но могут возникнуть другие подводные камни.
например, что если страница загрузится не полностью, а пользователь нажмет на ссылку, вызывающую ваш скрипт, расположенный где-то внизу в той части документа, которая еще не успела загрузиться?
элементы в head загружаются до загрузки документа. событие onload срабатывает, когда браузер закончит загрузку всего документа. мне кажется нужно для начала в этих двух вещах разобраться. и в том что делает сам скрипт - какие-то действия с DOM, или что-то другое
как я понимаю, рекомендация как раз из-за специфики тега head

  Ответить  
 
 автор: coloboc66   (12.11.2010 в 13:49)   письмо автору
 
   для: psychomc   (22.09.2010 в 14:17)
 

Ну а кто может посоветовать наиболее удобный и универсальный на его взгляд способ (место) размещения скрипта? Исходя из личного опыта?

  Ответить  
 
 автор: psychomc   (12.11.2010 в 15:24)   письмо автору
 
   для: coloboc66   (12.11.2010 в 13:49)
 

наиболее удобный, как мне кажется, в head.
а вообще, вот сейчас открыл "JavaScript Библия пользователя 5". там этому аспекту внимание практически не уделяется. так что размещайте где вам удобнее и не парьтесь, просто смотрите, чтобы ваши скрипты, работающие с DOM, не обращались к несуществующим элементам

  Ответить  
 
 автор: coloboc66   (12.11.2010 в 15:32)   письмо автору
 
   для: psychomc   (12.11.2010 в 15:24)
 

Да вот возникают вопросы, например, если мне нужно использовать на разных страницах body onload с разными функциями, а body находится в heading.php. Как тогда? Или без body onload можно всегда обойтись?

  Ответить  
 
 автор: psychomc   (12.11.2010 в 15:36)   письмо автору
 
   для: coloboc66   (12.11.2010 в 15:32)
 

всё зависит от того, что вы собираетесь делать.
p.s вы зря загоняетесь по поводу путей и размещения скрипта

  Ответить  
 
 автор: АЯ   (12.11.2010 в 21:17)   письмо автору
 
   для: coloboc66   (12.11.2010 в 13:49)
 

Я много раз здесь об этом писал.
Повторю. Мне не трудно: при размещении скриптового блока в заголовке (между тегами <head>...</head>) он гарантированно исполнится ещё ДО начала отображения тела документа. Под исполнится следует понимать не только реальное действие, но и определение функций.

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

И это легко проверяется.

  Ответить  
 
 автор: ddhvvn   (12.11.2010 в 21:39)   письмо автору
 
   для: АЯ   (12.11.2010 в 21:17)
 

Каждый, кто пишет что-то на JS? должен знать, что такое onload (document.ready, domready и т.п.) и что такой подход гарантирует исполнение скриптов после загрузки dom дерева.

И это легко проверяется.

  Ответить  
 
 автор: АЯ   (12.11.2010 в 23:21)   письмо автору
 
   для: ddhvvn   (12.11.2010 в 21:39)
 

Вам совет - когда что-то не знаете/не понимаете - Вы спрашивайте.
Спросить - оно совершенно не стыдно.
А вот ляпнуть не по делу - потом стыдно бывает.

  Ответить  
 
 автор: ddhvvn   (12.11.2010 в 23:29)   письмо автору
 
   для: АЯ   (12.11.2010 в 23:21)
 

да, да отлично, спасибо. Обязательно УЧТУ

  Ответить  
 
 автор: ddhvvn   (12.11.2010 в 21:41)   письмо автору
 
   для: coloboc66   (22.09.2010 в 12:57)
 

Лично я всегда вставлял, не "в верх", а именно в head.
Но в последнее время категорично стал вставлять все скрипты перед закрытием тега body (ну "стукнуло" меня, знаете ли =))

  Ответить  
 
 автор: АЯ   (12.11.2010 в 23:20)   письмо автору
 
   для: ddhvvn   (12.11.2010 в 21:41)
 

Чтобы Вас "стукнуло" обратно в <head>, Вам надо изучить атрибут DEFER у тега <SCRIPT>. По умолчанию он имеет значение false.

  Ответить  
 
 автор: ddhvvn   (12.11.2010 в 23:29)   письмо автору
 
   для: АЯ   (12.11.2010 в 23:20)
 

мм.. что тег <SCRIPT>? о, ужас, что это??

  Ответить  
 
 автор: kosta_in_net   (01.12.2010 в 16:20)   письмо автору
 
   для: АЯ   (12.11.2010 в 23:20)
 

Я, кстати, то же, в последнее время скрипты стараюсь убирать в конец страницы (те, в которых не требуется инициализация или выполнение до загрузки контента). Лично я полагаю, что это может улучшить индексацию. Так что, дело не в незнании атрибута DEFER или события ONLOAD, а в личных предпочтениях и ситуации.
Что же касается рекомендаций в учебниках, то нужно учесть, что первые из них писались при модемном интернете, когда после загрузки и отображения содержимого, можно было бы еще долго ждать, пока загрузится скрипт. Во время этого ожидания функции не работали бы. В определенных ситуациях это могло бы быть плохо. Поэтому учебники советовали совать скрипты вверх.
А сейчас это повторяют просто по инерции.
Хотя нынче не середина девяностых и можно не переживать о скриптах так сильно.
... хотя... сейчас страницами по мегабайту уже никого не удивишь. И сотни килобайт скриптов могут приходить с достаточной задержкой, чтобы не успеть вовремя.

  Ответить  
 
 автор: Агамемнон   (01.12.2010 в 17:21)   письмо автору
 
   для: kosta_in_net   (01.12.2010 в 16:20)
 

Рекомендации авторов доисторических пособий по JS актуальны и сейчас,хотя все зависит,конечно же,от конкретной ситуации.Что с того,что скорость в полтора-два мегабита и более в секунду уже никого не удивляет?Аппетит приходит во время еды:когда-то скорости хватало только на серфинг(не забудем еще и повременку или же тарификацию за объем трафика,все это было не так уж и давно),а сейчас у меня,к примеру,ю-торрент сразу пару-тройку фильмов качает,плюс загрузка какого-нибудь большого файла через менеджер закачек идет,плюс я сам интенсивно с сайта на сайт перескакиваю.Какая тогда будет скорость загрузки страниц?Понятное дело,небольшая.Так что лучше размещать скрипты в заголовке документа - для надежности.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования