Fehler in Javascript durch eventObjekt
Gerhard
- javascript
Hallo,
ich wollte in Javascript für den IE eine eigene Routine angeben und habe deshalb "if (!eventObjekt) ..... angegeben.
Der Internet Explorer meldet nun einen Fehler "eventObjekt nicht definiert", was ja eigentlich richtig ist, aber in dem Falle sollte er ja gerade die spezielle Routine ansteuern und nich einen Fehler melden.
Was habe ich da falsch gemacht?
So long
Gerhard
[latex]Mae govannen![/latex]
ich wollte in Javascript für den IE eine eigene Routine angeben und habe deshalb "if (!eventObjekt) ..... angegeben.
Der Internet Explorer meldet nun einen Fehler "eventObjekt nicht definiert", was ja eigentlich richtig ist, aber in dem Falle sollte er ja gerade die spezielle Routine ansteuern und nich einen Fehler melden.
Benutze zur Abfrage typeof und vergleiche auf "undefined"
Cü,
Kai
Hallo
Benutze zur Abfrage typeof und vergleiche auf "undefined"
Jetzt kommt zwar kein Fehler, aber wenn ich alert (typeof eventObjekt);
angebe kommt sowohl im IE als auch im Firefox und Opera "undefined".
So long
Gerhard
Hallo
Hier der zugehörige Script-Teil:
alert (typeof eventObjekt);
if (typeof eventObjekt != "undefined") // W3C-Standard
{
window.addEventListener ("load", init, false);
function init()
{
.............
}
}
else // Internet Explorer
{
window.attachEvent ("load", init);
function init()
{
..............
}
}
So long
Gerhard
Hi,
Hier der zugehörige Script-Teil:
alert (typeof eventObjekt);
if (typeof eventObjekt != "undefined") // W3C-Standard
{
window.addEventListener ("load", init, false);
Das event-Objekt wird bei FireFox & Co. an die Funktion automatisch als erster Parameter übergeben, die man einen auftretenden Event behandeln lässt - und muss für den IE zu diesem Zeitpunkt entsprechend "geholt" werden.
Aus deinem Code kann ich aber nicht ersehen, ob der zu einem Zeitpunkt ausgeführt wird, wo ein aufgetretener Event verarbeitet wird, bzw. es sieht mir eher so aus, als wärst du noch in der Initialisierungsphase deines Scriptes, wo erst mal die Eventhandler den Elementen zugewiesen werden. An der Stelle wäre es unsinnig, irgendwas mit dem event-Objekt anstellen zu wollen, es existiert noch gar nicht spezifisch.
MfG ChrisB
--
„This is the author's opinion, not necessarily that of Starbucks.“
alert (typeof eventObjekt);
if (typeof eventObjekt != "undefined") // W3C-Standard
{
window.addEventListener ("load", init, false);
function init()
{
.............
}
}
else // Internet Explorer
{
window.attachEvent ("load", init);
function init()
{
..............
}
}
Da hast du zwei Dinge zusammengeworfen:
1\. Das Registrieren von Handler-Funktionen
2\. Das Verarbeiten von Events in Handler-Funktionen
1\. Die Registrierung: Da notierst du die Handlerfunktion außerhalb der Fähigkeiten-Weiche:
function init (e) {...}
if (window.addEventListener) {
window.addEventListener("load", init, false);
} else if (window.attachEvent) {
window.attachEvent("onload", init);
}
Das ist soweit alles. Das Event-Objekt hat mit der Registrierung nichts zu tun.
2\. Die Verarbeitung. Jetzt kommt das Event-Objekt ins Spiel! Das gibt es logischerweise nur in der Handler-Funktion, hier »init« - nicht zu dem Zeitpunkt, wo du die Event-Überwachung erst startest, aber noch gar kein Event eingetreten ist.
Die Handlerfunktion nimmt das Event-Objekt als Parameter entgegen. DARIN solltest du schreiben:
function init (e) {
if (!e) e = window.event;
// Mach was mit e
}
Beispiel aus <http://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html#event-objekt>:
~~~javascript
function handlerfunktion (eventObjekt) {
// Vereinheitlichung:
if (!eventObjekt) {
// Korrektur für den Internet Explorer
eventObjekt = window.event;
}
...
}
Im Übrigen brauchst du die Handlerfunktion init nicht doppelt zu notieren. Notiere sie außerhalb der Abfrage if (document.addEventListener) {} else if (document.attachEvent) {}.
Mathias
ich wollte in Javascript für den IE eine eigene Routine angeben und habe deshalb "if (!eventObjekt) ..... angegeben.
Verwende typeof (im Vergleich dazu)
Mathias
Hallo,
Das im IE den Fehler produzierende "if (!eventObjekt)" habe ich aus einem Selfhtml-Artikel unter Traditionelles Event-Handling! Leider finde ich den Artikel im Augenblick nicht im Internet aber ich hatte ihn mir ausgedruckt.
So long
Gerhard