Глобальная переменная не инициализируется
Всем привет!
Пытаюсь создать переменную 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? |
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> |
Или так
<!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> |
Спасибо большое!
|
Цитата:
Но разве команда window.onload не означает, что "после того, как обработан код HTML до конца документа, вернуться к коду между <script>"? |
Нет. Браузер обрабатывает текст кода последовательно сверху вниз. Когда он встречает <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" не может быть найден |
Цитата:
|
window.onload - выполнится когда вся страница загрузится. Т.е. не только завершение парсинга но и загрузка всех картинок и т.д.
Чтоб сработало чётко по завершении парсинга используется событие DOMContentLoaded. |
Понял, всем спасибо!
|
Часовой пояс GMT +3, время: 07:33. |