Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2011, 14:34
Аспирант
Отправить личное сообщение для Kotakota Посмотреть профиль Найти все сообщения от Kotakota
 
Регистрация: 12.07.2011
Сообщений: 71

Странное поведение переменной при подключении скрипта.
Привет.
Есть файл скрипта:
test.js
var cool = {id:5};

Теперь самое интересное!
Подключаем этот файл из *.html методом раз:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<script type="text/javascript" src="test.js"></script>
<script>alert(cool.id);</script>
</head>
<body>
<button onClick="javascript:alert(cool.id);">Press here for get you id now!</button>
</body>
</html>

Тут все понятно. Сначала alert'ом выводится число 5, а если нажимаем на кнопку "Press here for get you id now!", то число 5 выводится еще раз.
Подключаем этот файл из *.html методом два:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
</head>
<body>
<button onClick="javascript:alert(cool.id);">Press here for get you id now!</button>
<script>
(function() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.async =  true;
    script.src = 'test.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);
})();
</script>
<script>alert(cool.id);</script>
</body>
</html>

При попытке вывести число 5, простым alert'ом появляется ошибка:
cool is not defined
а если нажать на кнопку, то все в порядке и число 5 выводится!
Почему так происходит?
Хочу обратить внимание, что во втором варианте подключения, я даже строку
<script>alert(cool.id);</script>

опустил ниже динамического подключения самого скрипта.
Чтобы на верняка!

Последний раз редактировалось Kotakota, 11.08.2011 в 14:36.
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2011, 14:41
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Ну а что ты хотел все так быстро, понятно дело что нужно время на то что бы скрипт загрузился, вот пока он грузится этот alert срабатывает быстрее чем загрузился скрипт
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2011, 14:43
Аспирант
Отправить личное сообщение для Kotakota Посмотреть профиль Найти все сообщения от Kotakota
 
Регистрация: 12.07.2011
Сообщений: 71

Сообщение от devote Посмотреть сообщение
Ну а что ты хотел все так быстро, понятно дело что нужно время на то что бы скрипт загрузился, вот пока он грузится этот alert срабатывает быстрее чем загрузился скрипт
Едрит Мадрид!
Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 11.08.2011, 15:01
Аспирант
Отправить личное сообщение для Kotakota Посмотреть профиль Найти все сообщения от Kotakota
 
Регистрация: 12.07.2011
Сообщений: 71

Ну и вопрос в тему...
А как при втором варианте проверить, что скрипт загрузился?
Кроме извращений с callback и onreadystatechange?
Выполнить его в setTimeout()?
Ответить с цитированием
  #5 (permalink)  
Старый 11.08.2011, 15:16
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Kotakota
Кроме извращений с callback и onreadystatechange?
Выполнить его в setTimeout()?
типо того
Ответить с цитированием
  #6 (permalink)  
Старый 11.08.2011, 16:07
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

есть еще такой вариант Проверка на существование файла в IE с помощью readyState
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2011, 06:52
Аспирант
Отправить личное сообщение для Kotakota Посмотреть профиль Найти все сообщения от Kotakota
 
Регистрация: 12.07.2011
Сообщений: 71

Сообщение от devote Посмотреть сообщение
есть еще такой вариант Проверка на существование файла в IE с помощью readyState
Я подумаю над этим.
Спасибо!
Но пока склоняюсь подключить скрипт в конец тега <BODY>

Последний раз редактировалось Kotakota, 12.08.2011 в 07:17.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Странное поведение... popov654 Общие вопросы Javascript 6 29.03.2011 05:14
Странное поведение переменной mycoding Серверные языки и технологии 4 14.01.2011 19:18
При подключении скрипта, перестают работать другие скрипты 365441010 Элементы интерфейса 1 30.01.2010 09:25
Странное повидение IE при простом скрипте. JustViktor Элементы интерфейса 5 21.09.2009 15:51