Wann sollte ich beobachten, Javascript-Ereignisse auf Fenster vs. Dokument vs. Dokument.Körper?
Ich bin mit prototype.js für meine web-app, und ich habe alles am laufen auf Chrome, Safari und Firefox. Ich arbeite jetzt auf IE8 Kompatibilität.
So, ich habe das debugging im IE, habe ich gemerkt, dass es Javascript-events, für die ich zuvor festgelegt haben Beobachter auf der Fenster, z.B.
Event.observe(window, eventType, function () {...});
(wo eventType
könnte "dom:loaded"
, "keypress"
usw.) und es funktioniert gut in Chrome/Safari/Firefox. Jedoch im IE die Beobachter nie ausgelöst.
Zumindest In einigen Fällen, die ich bekommen konnte, das funktioniert auf Internet Explorer, indem Sie, anstatt Platzierung der Betrachter auf etwas anderes als window
z.B. document
(im Fall von "dom:loaded"
) oder document.body
(im Fall von "keypress"
). Allerdings ist das alles trial-and-error.
Gibt es einige mehr systematische Art und Weise zu bestimmen, wo diese Beobachter so, dass die Ergebnisse der cross-browser-kompatibel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den verschiedenen Browser-Objekt-Dokumentation (z.B.
window
auf MSDN,document
auf MDC) definieren, welche Veranstaltungen unterstützt werden, die auf das Objekt. Sie konnte es starten.onresize
Veranstaltung auf derwindow
, aber ich weiß nicht wirklich sehen es hier aufgeführt.onresize
ausgesetzt ist, durchwindow.prototype
auf IE. Es ist in der doc.window.prototype
vielen Dank Alsciende.(Dies ist keine super-ausführliche Antwort, aber es scheint gut zu funktionieren empirisch -- so hoffentlich diese Faustregeln hilfreich sein für andere.)
Im Allgemeinen, registrieren von Ereignissen auf
document
, nichtwindow
. Webkit-und mozilla-Browsern scheinen glücklich zu sein mit, aber der IE reagiert nicht auf die meisten registrierten Ereignisse auf die Fenster, so müssen Siedocument
arbeiten mit dem IEAusnahme:
resize
und Veranstaltungen zum laden, entladen und öffnen/schließen, sollten alle eingestellt werden auf das Fenster.Ausnahme von der erste Ausnahme:
dom:loaded
muss aufdocument
im IE.Andere Ausnahme: Bei der Erkennung von Tastatureingaben unter Mozilla mit find-as-you-type aktiviert ist, legen Sie Ihre Schlüssel-Ereignis Beobachter auf der
window
, nicht diedocument
. Wenn Sie letzteres tun, die find-as-you-type scheint zu blockieren, die Veranstaltung.window.addEventListener('keyup', handler)
wird auch NICHT funktionieren.