У меня есть функция javascript, которая манипулирует DOM при ее вызове (добавляет классы CSS и т. д.). Это вызывается, когда пользователь изменяет некоторые значения в форме. Когда документ загружается впервые, я хочу вызвать эту функцию для подготовки начального состояния (что в данном случае проще, чем настройка DOM со стороны сервера в правильное начальное состояние).
Лучше использовать window.onload для выполнения этой функции или иметь блок сценария после элементов DOM, которые мне нужно изменить? В любом случае, почему это лучше?
Например:
function updateDOM(id) {
// updates the id element based on form state
}
я должен вызвать его через:
window.onload = function() { updateDOM("myElement"); };
или же:
<div id = "myElement">...</div>
<script language = "javascript">
updateDOM("myElement");
</script>
Первый кажется стандартным способом сделать это, но второй кажется таким же хорошим, возможно, лучше, поскольку он обновит элемент, как только скрипт будет запущен, и пока он помещается после элемента, я не вижу в этом проблемы.
есть идеи? Одна версия действительно лучше другой?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Определенно используйте onload. Храните скрипты отдельно от страницы, иначе вы сойдете с ума, пытаясь распутать их позже.
Я придерживаюсь первого взгляда, потому что у вас может быть только 1 функция window.onload, в то время как встроенные блоки скрипта имеют номер п.
onLoad, потому что гораздо легче определить, какой код запускается при загрузке страницы, чем читать тысячи HTML-страниц в поисках тегов сценария, которые могут выполняться.
Хотя я согласен с другими в использовании window.onload, если это возможно для чистого кода, я почти уверен, что window.onload будет вызываться снова, когда пользователь нажмет кнопку «Назад» в IE, но больше не будет вызван в Firefox. (Если только они не меняли его недавно).
Обновлено: я мог бы сделать это наоборот.
В некоторых случаях необходимо использовать встроенный скрипт, когда вы хотите, чтобы ваш скрипт оценивался, когда пользователь нажимает кнопку возврата с другой страницы, обратно на вашу страницу.
Любые исправления или дополнения к этому ответу приветствуются ... Я не эксперт по javascript.
@ Компьютерщик
I'm pretty sure that window.onload will be called again when a user hits the back button in IE, but doesn't get called again in Firefox. (Unless they changed it recently).
В Firefox onload вызывается, когда DOM завершает загрузку, независимо от того, как вы перешли на страницу.
Некоторые фреймворки JavaScript, такие как mootools, предоставляют вам доступ к специальному событию с именем «domready»:
Contains the window Event 'domready', which will execute when the DOM has loaded. To ensure that DOM elements exist when the code attempting to access them is executed, they should be placed within the 'domready' event.
window.addEvent('domready', function() { alert("The DOM is ready."); });
Событие onload считается правильным способом сделать это, но если вы не возражаете использовать библиотеку javascript, jQuery $ (document) .ready () еще лучше.
$(document).ready(function(){
// manipulate the DOM all you want here
});
Преимущества:
Надеюсь, я не стану парнем, который предлагает jQuery по каждому вопросу JavaScript, но это действительно здорово.
window.onload в IE также ожидает загрузки двоичной информации. Это не строгое определение «когда загружена DOM». Таким образом, может быть значительная задержка между моментом, когда страница воспринимается как загруженная, и моментом запуска вашего скрипта. По этой причине я бы порекомендовал заглянуть в одну из многочисленных JS-фреймворков (prototype / jQuery), чтобы справиться с тяжелой работой за вас.
Я написал много Javascript, и window.onload - это способ ужасный сделать это. Он хрупкий и ждет, пока загрузится ресурс каждый страницы. Поэтому, если одно изображение занимает вечность или ресурс не истекает по таймауту до 30 секунд, ваш код не будет запущен, прежде чем пользователь сможет увидеть / управлять страницей.
Кроме того, если другой фрагмент Javascript решит использовать window.onload = function () {}, ваш код будет просто поражен.
Правильный способ запустить ваш код, когда страница будет готова, - подождать, пока элемент, который вам нужно изменить, будет готов / доступен. Многие библиотеки JS имеют это как встроенную функцию.
Проверить: