register - ¿Cuándo debo observar los eventos de javascript en la ventana frente a documento frente a document.body?
mdn events javascript (2)
Estoy usando prototype.js para mi aplicación web, y tengo todo funcionando en chrome, safari y firefox. Ahora estoy trabajando en la compatibilidad con IE8.
Como he estado depurando en IE, he notado que hay eventos de javascript para los que previamente he configurado un observador en la ventana, por ejemplo
Event.observe(window, eventType, function () {...});
(donde eventType
puede ser "dom:loaded"
, "keypress"
, etc.) y funciona bien en Chrome / Safari / Firefox. Sin embargo, en IE el observador nunca dispara.
En al menos algunos casos, podría hacer que esto funcione en IE colocando al observador en otra cosa que no sea la window
, por ejemplo, document
(en el caso de "dom:loaded"
) o document.body
(en el caso de "keypress"
de "keypress"
) . Sin embargo, esto es todo prueba y error.
¿Hay alguna forma más sistemática de determinar dónde ubicar a estos observadores para que los resultados sean compatibles con todos los navegadores?
¡Gracias!
(Esta no es una respuesta muy completa, pero parece funcionar de manera empírica, así que espero que estas reglas empíricas sean útiles para otros).
En general, registrar eventos en
document
, no enwindow
. Los navegadores webkit y mozilla parecen estar contentos con cualquiera de los dos, pero IE no responde a la mayoría de los eventos registrados en la ventana, por lo que necesita usar eldocument
para trabajar con IEExcepción: el
resize
y los eventos relacionados con la carga, descarga y apertura / cierre deben configurarse en la ventana.Excepción a la primera excepción:
dom:loaded
debe establecerse en eldocument
en IE.Otra excepción: cuando detecte pulsaciones en Mozilla con la función de búsqueda de tipo habilitada, configure sus observadores de eventos clave en la
window
, no en eldocument
. Si hace esto último, el tipo de búsqueda a medida que se bloquea bloquea el evento.