Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Событие ready и теги script (https://javascript.ru/forum/jquery/35640-sobytie-ready-i-tegi-script.html)

FanAizu 16.02.2013 23:27

Событие ready и теги script
 
Вопрос в следующем: DOM считается готовым после того, как отработают все скрипты внутри тегов script или же событие ready может быть сгенерированно до того, как отработаю скрипты из тегов script? Расскажите, пожалуйста, и дайте ссылку, если возможно, почитать на эту тему. Спасибо.

danik.js 16.02.2013 23:35

Создание DOM приостанавливается на каждом script, в том числе и внешнем. Но это только в случае если у script нет атрибута defer или async.

FanAizu 16.02.2013 23:38

Цитата:

Сообщение от danik.js (Сообщение 234863)
Создание DOM приостанавливается на каждом script, в том числе и внешнем. Но это только в случае если у script нет атрибута defer или async.

Значит ли это, что событие ready не будет сгенерировано пока не отработают все скрипты из тегов script?

danik.js 16.02.2013 23:41

Да. Кроме defer|async

FanAizu 17.02.2013 00:14

Цитата:

Сообщение от danik.js (Сообщение 234869)
Да. Кроме defer|async

А подскажите ещё, пожалуйста, скрипты отрабатывают в той последовательности, в которой они идут в доукменте, т.е. скрипты которые находятся выше в документе(ближе к началу документа, то есть к строке doctype) отрабатывают раньше, чем те, что за ними? Или же это происходит в произвольном порядке?

Deff 17.02.2013 00:22

Если скрипт стоит после тега </body>
Он отработает позже события $(document).ready

danik.js 17.02.2013 10:41

Deff, с чего ты взял? Кстати, скрипты должны быть либо в head либо в body, других вариантов нет (если в html5 их не узаконили)

Deff 17.02.2013 10:59

Цитата:

Сообщение от danik.js
Кстати, скрипты должны быть либо в head либо в body, других вариантов нет


danik.js,
Посмотри рекламу от yandex http://hostjs-mybb2011.narod.ru/Rus_Lat.htm
Внизу после </html>
Это yandex сам её вставляет.

danik.js 17.02.2013 11:21

Реклама? Еще чего )

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>$(document).ready(function(){ alert('ready')});</script>
        <script>alert('script in head');</script>
    </head>
    <body>
        <script>alert('script in body');</script>
    </body>
    <script>alert('script after body');</script>
</html>
<script>alert('script after html');</script>

Deff 17.02.2013 11:39

danik.js,
Да = уже заметил, - я вставлял на реальную страницу. http://designforum.bestff.ru/

Походу для произвольного случая - соврал
_____________
Уточнил про рекламу, пост #8

danik.js 17.02.2013 11:48

Цитата:

Сообщение от Deff
после тега </body>

Цитата:

Сообщение от Deff
Внизу после </html>

Так после body или после html ? Насчет второго случая не знаю что сказать, это вообще что-то непонятное. Даже не знаю как браузер себя поведет, и как должен себя вести.

Цитата:

Сообщение от Deff
хотя бы из поста 7

Что ты вставлял из поста 7? В нем ведь ни строчки кода :)
Вобще я не понял о чем ты.

danik.js 17.02.2013 11:52

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

Deff 17.02.2013 12:32

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>$(document).ready(function(){ alert('ready')});</script>
        <script>alert('script in head');</script>
    </head>
    <body>
        <script>alert('script in body');</script>
    
<script type="text/javascript">
try{jQuery.ready();}catch(e){}
try{
$(document).ready(function(){alert('ready');
	var ac = 0;

});
}catch(e){}
</script>

</body>
    <script>alert('script after body');</script>
</html>
<script>alert('script after html');</script>

:p

danik.js 17.02.2013 13:03

Ах, если вопрос был в этом, то есть такая штука как document.createEvent, с ее помощью можно любое событие создать программно. Причем, насколько мне известно, в webkit нет возможности отличить событие, созданное через Element.prototype.dispatchEvent от настоящего.
Так что да, любое событие может произойти когда угодно, если этого захотеть.


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