Этот вопрос настолько прост, я уверен, что это должен быть дубликат что-то, хотя у меня есть looked for something similar.Javascript: Лучшее место для регистрации обработчиков событий
Мой вопрос в основном: Где лучше всего первоначально регистрировать обработчики событий для элементов HTML?
Самого простой способ зарегистрировать обработчик события, очевидно, просто сделать это рядным:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
Но это идет вразрез с подавляющим маршем к разделению логики и содержания в современной веб-разработке. Таким образом, в 2012 году вся логика/поведение должны выполняться в чистом коде Javascript. Это здорово, и это приводит к более удобному коду. Но вам все равно нужен начальный крючок, который соединяет ваши HTML-элементы с вашим кодом Javascript.
Обычно я просто делаю что-то вроде:
<body onload = "registerAllEventHandlers()">
Но ... это все-таки «обман», не правда ли - потому что мы все еще используем встроенный Javascript здесь. Но какие у нас есть другие варианты? Мы не можем сделать это в <script>
тега в разделе <head>
, потому что в тот момент мы не можем получить доступ к DOM, поскольку страница еще не загружена:
<head>
<script type = "text/javascript">
var myButton = document.getElementById("mybutton"); // myButton is null!
</script>
</head>
ли мы размещаем <script>
тег на внизу на странице что ли? Нравится:
<html>
<body>
...
...
<script type = "text/javascript">
registerAllEventHandlers();
</script>
</body>
</html>
Какая у вас лучшая практика?
-1: Событие 'window.onload' не эквивалентно использованию события' ready' jQuery: '' window.onload 'будет срабатывать, когда страница завершит загрузку, включая все внешние ресурсы (изображения, CSS и т. Д.), В то время как Событие jquery 'ready' запускается после завершения загрузки HTML, но перед внешними ресурсами. Использование 'window.onload' - плохая идея, потому что во многих случаях (многие изображения, медленное соединение и т. Д.) События JavaScript не будут регистрироваться в течение длительного времени. – georgebrock
@slebetman: Можете ли вы рассказать о том, почему глупо присоединять обработчики событий JS до загрузки изображений (и т. Д.) И понимать различия между двумя разными методами? На сайте, предназначенном для обучения и обмена информацией, комментарий, говорящий «это глупо», не очень конструктивен. – georgebrock