Esta pregunta es tan básica, estoy seguro de que debe haber un duplicado de algo, aunque tengo looked for something similar.Javascript: El mejor lugar para registrar controladores de eventos
Mi pregunta es básicamente: ¿Cuál es el mejor lugar para registrar inicialmente controladores de eventos para elementos HTML?
La forma más fácil de registrar un controlador de eventos es, obviamente, sólo lo hacen en línea:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
Pero esto va en contra de la marcha abrumadora hacia la separación de la lógica y el contenido en el desarrollo web moderno. Entonces, en 2012, se supone que toda la lógica/comportamiento debe hacerse en código JavaScript puro. Eso es genial, y conduce a un código más fácil de mantener. Pero aún necesita un gancho inicial que conecte sus elementos HTML con su código JavaScript.
Por lo general, acabo de hacer algo como:
<body onload = "registerAllEventHandlers()">
... Pero eso sigue siendo "trampa", ¿no es así - porque todavía estamos utilizando JavaScript en línea aquí. Pero, ¿qué otras opciones tenemos? No podemos hacerlo en una etiqueta en la sección <script>
<head>
, porque en ese momento no podemos acceder al DOM ya que la página no se ha cargado todavía:
<head>
<script type = "text/javascript">
var myButton = document.getElementById("mybutton"); // myButton is null!
</script>
</head>
¿Colocamos una etiqueta en la <script>
parte inferior de la página o algo? Me gusta:
<html>
<body>
...
...
<script type = "text/javascript">
registerAllEventHandlers();
</script>
</body>
</html>
¿Cuál es la mejor práctica aquí?
-1: El evento 'window.onload' no es equivalente al uso del evento' ready' de jQuery: 'window.onload' se activará cuando la página haya terminado de cargarse, incluidos todos los recursos externos (imágenes, CSS, etc.) mientras El evento 'ready' de jQuery se activará una vez que el HTML haya terminado de cargarse pero antes de los recursos externos. Usar 'window.onload' es una mala idea, porque en muchos casos (muchas imágenes, conexión lenta, etc.) los eventos de JavaScript no se registrarán durante mucho tiempo. – georgebrock
@slebetman: ¿Puede explicar por qué es estúpido asociar manejadores de eventos JS antes de que se carguen imágenes (etc.) y comprender las diferencias entre dos técnicas diferentes? En un sitio destinado a aprender y compartir información, un comentario que dice "eso es estúpido" no es muy constructivo. – georgebrock