Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2023, 19:00
Новичок на форуме
Отправить личное сообщение для LocalVariable Посмотреть профиль Найти все сообщения от LocalVariable
 
Регистрация: 01.06.2023
Сообщений: 5

Глобальная переменная не инициализируется
Всем привет!
Пытаюсь создать переменную i внутри <script></script>:

<!doctype html>
<script>
let i = document.getElementById("txt");
window.onload = init;
function init (){
	alert(i);
}
</script>
<body>
<p1 id="txt">Something</p1>
</body>


Выдает null. Если поместить строчку let i = document.getElementById("txt"); внутрь init(), то показывает правильно, что HTLMElement. Вместо let пытался использовать var, с тем же результатом. Как сделать так, чтобы переменная i инициализировалась правильно, ведь инициализация происходит перед window.onload?
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2023, 19:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

LocalVariable,
<!doctype html>
<script>
let i;
window.onload = init;
function init (){
    i = document.getElementById("txt");
    alert(i);
}
</script>
<body>
<p1 id="txt">Something</p1>
</body>
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2023, 21:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Или так
<!doctype html>
<body>
<p1 id="txt">Something</p1>
<script>
let i = document.getElementById("txt");
window.onload = init;
function init (){
    alert(i);
}
</script>
</body>

i = document.getElementById("txt");
должно выполнятся после того, как браузер обработает строчку
<p1 id="txt">Something</p1>
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2023, 22:12
Новичок на форуме
Отправить личное сообщение для LocalVariable Посмотреть профиль Найти все сообщения от LocalVariable
 
Регистрация: 01.06.2023
Сообщений: 5

Спасибо большое!
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2023, 01:10
Новичок на форуме
Отправить личное сообщение для LocalVariable Посмотреть профиль Найти все сообщения от LocalVariable
 
Регистрация: 01.06.2023
Сообщений: 5

Сообщение от voraa Посмотреть сообщение
i = document.getElementById("txt");
должно выполнятся после того, как браузер обработает строчку <p1 id="txt">Something</p1>
...

Но разве команда
window.onload

не означает, что "после того, как обработан код HTML до конца документа, вернуться к коду между <script>"?
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2023, 07:47
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Нет. Браузер обрабатывает текст кода последовательно сверху вниз. Когда он встречает <script> то просто выполняет его, потом идет дальше и снова начинает парсить html

<!doctype html>
<script>
let i = document.getElementById("txt");
window.onload = init;
function init (){
    alert(i);
}
</script>
<body>
<p1 id="txt">Something</p1>
</body>

Сначала выполнится строка
3 let i = document.getElementById("txt");
Но строка
<p1 id="txt">Something</p1>
еще не разобрана, и элемент с id="txt" не может быть найден

Последний раз редактировалось voraa, 02.06.2023 в 07:51.
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2023, 12:21
Новичок на форуме
Отправить личное сообщение для LocalVariable Посмотреть профиль Найти все сообщения от LocalVariable
 
Регистрация: 01.06.2023
Сообщений: 5

Сообщение от voraa
Когда он встречает <script> то просто выполняет его, потом идет дальше и снова начинает парсить html
И только после завершения парсинга выполнится window.onload?
Ответить с цитированием
  #8 (permalink)  
Старый 02.06.2023, 12:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

window.onload - выполнится когда вся страница загрузится. Т.е. не только завершение парсинга но и загрузка всех картинок и т.д.
Чтоб сработало чётко по завершении парсинга используется событие DOMContentLoaded.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 02.06.2023, 13:12
Новичок на форуме
Отправить личное сообщение для LocalVariable Посмотреть профиль Найти все сообщения от LocalVariable
 
Регистрация: 01.06.2023
Сообщений: 5

Понял, всем спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальная переменная и аргумент DenisZ Общие вопросы Javascript 2 24.10.2022 20:45
setInterval, не меняет значение глобальная переменная. Javany11 Элементы интерфейса 8 04.03.2018 18:56
глобальная переменная jquery imediasun1 Элементы интерфейса 2 05.01.2014 21:30
.trigger() и глобальная переменная madicom jQuery 1 25.12.2011 17:53
Глобальная переменная vah-smile Общие вопросы Javascript 3 06.07.2010 12:41