Estoy buscando la manera más adecuada y eficiente de vincular eventos javascript; particularmente el evento de carga (me gustaría que ocurriera el evento después de cargar la página Y todos los elementos, como las imágenes). Sé que hay formas simples de hacer esto en jQuery, pero me gustaría el método más eficiente raw javascript.correctamente enlazar eventos de javascript
Respuesta
Hay dos formas diferentes de hacerlo. Solo uno funcionará; cuál depende del navegador. He aquí un método de utilidad que utiliza tanto:
function bindEvent(element, type, handler) {
if(element.addEventListener) {
element.addEventListener(type, handler, false);
} else {
element.attachEvent('on'+type, handler);
}
}
En su caso:
bindEvent(window, 'load', function() {
// all elements such as images are loaded here
});
Sé que no sólo se pregunta acerca de cómo enlazar eventos. Pero Ooooo, la diversión no termina allí. Hay mucho más para obtener este navegador cruzado correcto que solo el enlace inicial.
La respuesta de @d. Será suficiente para el caso específico del evento load
de que está buscando. Pero puede dar a los lectores novatos de su código una falsa sensación de "hacerlo bien". Solo porque hayas vinculado el evento no significa que hayas tenido cuidado de normalizarlo. Usted puede ser mejor de simplemente fijar window.onload
:. Respuesta
window.onload = (function(onload) {
return function(event) {
onload && onload(event);
// now do your thing here
}
}(window.onload))
Sin embargo, para el caso general de eventos @ d unión de está tan lejos de satisfactorio como para ser frustrante. Lo único que hace bien es usar detección de características en lugar de detección de navegador.
Para no exagerar mucho aquí, pero el enlace de eventos de JavaScript probablemente sea el razón número 1 para ir con una biblioteca de JavaScript. No me importa cuál es, otras personas han solucionado este problema una y otra vez. Acá los problemas de una aplicación casera una vez dentro de la función de controlador:
- ¿Cómo puedo obtener una bodega de la
event
objeto en sí? - ¿Cómo evito que la acción predeterminada del evento (por ejemplo, al hacer clic en un vínculo, pero no navegar)
- ¿Por qué
this
punto al objetowindow
todo el tiempo? - (eventos de mouse Re) ¿Cuáles son los coords x/y del evento?
- ¿Qué botón del mouse activó el evento?
- ¿Fue un Ctrl-clic o simplemente un clic normal?
- ¿En qué elemento se desencadenó realmente el evento?
- ¿Qué elemento va al evento a? (es decir,
relatedTarget
, digamos porblur
) - ¿Cómo cancelo el burbujeo del evento a través de su DOM principal?
- (Re evento burbujeando) ¿Qué elemento está recibiendo realmente el evento ahora? (es decir,
currentTarget
) - ¿Por qué no puedo obtener el código de error del evento
keydown
? - ¿Por qué mi página tiene una pérdida de memoria cuando agrego todos estos controladores de eventos? Argh!
- ¿Por qué no puedo desvincular esta función anónima que envié antes?
Y la lista sigue ...
La única buena razón para rodar su propia en estos días es para el aprendizaje. Y eso está bien. Aún así, lea PPK's Intro to browser events. Mira el jQuery source. Mira el Prototype source. No te arrepentirás.
Publicación interesante. –
Hay instancias donde cargar una ** biblioteca ** o ** framewo rk ** no son prácticos y son exagerados por una serie de razones (carga inicial contra carga tardía, hinchazón de js para "funcionalidad simple", ...). – augurone
Algo así
window.onload = (function(onload) {
return function(event) {
onload && onload(event);
$(".loading-overlay .spinner").fadeOut(300),
$(".loading-overlay").fadeOut(300);
$("body").css({
overflow: "auto",
height: "auto",
position: "relative"
})
}
}(window.onload));
- 1. Enlazar varios eventos en jQuery
- 2. Cómo enlazar eventos jquery en mi vista
- 3. Enlazar eventos múltiples con el método 'en vivo' de jQuery
- 4. No se pueden enlazar los eventos de video usando Jquery
- 5. Knockout JS - Cómo enlazar correctamente un array observable
- 6. Cómo enlazar eventos en jQuery jQuery PREDECLARED múltiples objetos
- 7. Secuencia de eventos de JavaScript
- 8. jQuery.bind() eventos en el llano Javascript objetos
- 9. protocolo y eventos Javascript
- 10. Propagación de eventos en Javascript
- 11. Biblioteca de eventos javascript modular
- 12. Explorador de eventos Scroll javascript
- 13. JavaScript: eliminar detector de eventos
- 14. Cerrando WebSocket correctamente (HTML5, Javascript)
- 15. Elimine correctamente los controladores de eventos de funciones anónimas
- 16. JavaScript mapping eventos táctiles a eventos de mouse
- 17. Javascript: múltiples eventos de mouse desencadenados
- 18. Cómo gestionar correctamente los eventos de clic en el widget
- 19. Nombrar correctamente los eventos y controladores de C#
- 20. Cómo anular el registro correctamente un controlador de eventos
- 21. JavaScript y Eventos - Mejor Práctica
- 22. eventos JavaScript en línea sintaxis
- 23. Módulo Javascript Eventos y Escuchas
- 24. Enlazar una función de JavaScript existente en jQuery
- 25. Orden de controlador de eventos de Javascript
- 26. Depuración de eventos de JavaScript con Firebug
- 27. Javascript Gestor de Eventos de impresión
- 28. JavaScript argumentos de controlador de eventos
- 29. javascript: Cómo depurar eventos de teclado
- 30. teclado procesador de eventos En JavaScript
Muchas gracias. Muy completo y exactamente lo que estoy buscando! – Jackie
@Jackie: la diversión no termina aquí. Ver mi respuesta –
El evento en sí es una dependencia que se puede evitar en gran parte al comprender el DOM. DOM carga de una manera de arriba a abajo; los artículos más cerca de la parte superior del documento se cargan antes mientras que los artículos se dirigen hacia el final más adelante. Al cargar las secuencias de comandos que tienen dependencias DOM al final de su documento, muchas de estas preocupaciones se pueden mitigar sin vinculación de eventos. Mantenlo simple. – augurone