Глобальная переменная не инициализируется
Всем привет!
Пытаюсь создать переменную 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, время: 08:42. |