[JavaScript] Registrierung von Eventhandlern
Roland
- javascript
Hallo!
Ich schaffe es einfach nicht, einen Eventhandler zu registrieren, der sowohl im Firefox als auch im MSIE läuft.
Mein Code bis jetzt: (läuft im FF, aber nicht im MSIE)
function init()
{
document.forms[0].elements[0].focus();
}
if (window.addEventListener)
{
window.addEventListener('load', init, false);
}
else if (document.getElementsByTagName['body'][0].attachEvent)
{
document.getElementsByTagName['body'][0].attachEvent('onload', init);
}
Wieso brauch ich dafür eigentlich überhaupt n eventhandler?
Wieso wird document.forms[0].elements[0].focus() nicht auf einfach so ausgeführt, genauso wie alert(4+5) ausgeführt werden würde?
Hallo Roland,
schon mal
window.onload=init;
versucht?
Wieso brauch ich dafür eigentlich überhaupt n eventhandler?
weil, wenn das am Anfang im Head stehende Script abgearbeitet wird, das Formular noch nicht existiert. Daher "onload".
Wieso wird document.forms[0].elements[0].focus() nicht auf einfach so ausgeführt, genauso wie alert(4+5) ausgeführt werden würde?
Weil alert immer geht, auch ohne Body, ohne Formular, ohne .... Du kannst aber den Befehl hinter das Formular setzen.
Gruß, Jürgen
Hallo Roland,
schon mal
window.onload=init;
versucht?
Das kann ich nicht verwenden. Ich binde mehrere JS-Dateien ein. In mehreren kommt aber onload drin vor. Wenn ich das nun so mache wie du es gesagt hast, dann überschreiben die sich gegenseitig und so funktioniert nur ein teil. deswegen muss ich alles per addEventListener bzw. attachEvent machen.
Hallo Roland,
Das kann ich nicht verwenden. Ich binde mehrere JS-Dateien ein. ...
vieleicht hilft das hier:
function addEvent(oTarget, sType, fpDest) {
var oOldEvent = oTarget[sType];
if (typeof oOldEvent != "function") {
oTarget[sType] = fpDest;
} else {
oTarget[sType] = function(e) {
oOldEvent(e);
fpDest(e);
}
}
}
addEvent(window,"onload",init);
Gruß, Jürgen
Ehrlich gesagt verstehe ich das nicht wirklich.
Ich finde das komisch. addEventListener ist doch eigentlich die Standard-W3C-Methode um Eventhandler zu erstellen. aber man findet kaum hilfe (z.b. in form von tutorials) im internet. selbst in selfhtml steht dazu höchstens 2 sätze. und zu attachevent steht schon gar nix.
wird diese methode denn von niemanden benutzt?
Hallo Roland,
Ehrlich gesagt verstehe ich das nicht wirklich.
ich auch nicht.
...
wird diese methode denn von niemanden benutzt?
nach dem Lesen diverser Beiträge zu "addEventListener" und seiner browserübergreifenden Verbreitung habe ich mich entschlossen, die "zu-Fuß-Methode", die an vielen Stellen empfohlen wurde, zu verwenden.
Bei sehr vielen Eventhandlern könnte man diese auch in ein Funktionsarray legen und in einer Schleife abarbeiten. Dann ist ein "removeEvent" auch möglich.
Gruß, Jürgen
Hallo Roland,
schon mal
window.onload=init;
versucht?
weil, wenn das am Anfang im Head stehende Script abgearbeitet wird, das Formular noch nicht existiert. Daher "onload".
Hm, also es hilft jetzt zwar Roland nicht weiter bei seinem problem, aber ich hab eine zwischenfrage: Wenn dass so ist, dass ist doch window.onload gar nicht nötig, oder? dann könnte man auch schreiben document.getElementsByTagName['form'][0].onload
hab ich das so richtig verstanden?
wieso schlägst du window.onload vor? hat das vorteile?
joa, und dann halt die frage von roland: wie ist das mit addeventlistener und attachevenet zu realisieren?
hi,
Wenn dass so ist, dass ist doch window.onload gar nicht nötig, oder? dann könnte man auch schreiben document.getElementsByTagName['form'][0].onload
hab ich das so richtig verstanden?
wieso schlägst du window.onload vor? hat das vorteile?
Der Vorteil ist, es funktioniert.
Nur bei window und image-Objekten feuern die Browser einen Event onload - du kannst ihn nicht einfach auf beliebigen Elementen nutzen.
gruß,
wahsaga
Nur bei window und image-Objekten feuern die Browser einen Event onload - du kannst ihn nicht einfach auf beliebigen Elementen nutzen.
Aber mit addEventListener kann man jedem Element ein onload Eventhandler zuweisen, oder nicht?
Hallo Torsten,
Aber mit addEventListener kann man jedem Element ein onload Eventhandler zuweisen, oder nicht?
Ich glaube nicht. Aber Du kannst es ja mal in "allen" Browsern unter "allen" Systemen testen.
Im Ernst: Wie wahsaga schon schrieb, window.onload geht "überall".
Gruß, Jürgen
Im Ernst: Wie wahsaga schon schrieb, window.onload geht "überall".
Ja, schon. Aber bei mir ist das auch schonmal aufgetreten, was Roland beschrieben hat. Wenn man zwei Skripte nacheinander einbindet und in beiden kommt window.onload = blabla drin vor, dann überschreibt das zweite das erste skript und es wird nur eins ausgeführt.
roland meinte ja mit addeventlistener gäbe es das problem nicht. deswegen würde mich auch interessieren, die man diese methode korrekt zum laufen bringt. roland meinte ja, im FF würds schon gehen, nur im IE nocht nicht...
Hi,
Ja, schon. Aber bei mir ist das auch schonmal aufgetreten, was Roland beschrieben hat. Wenn man zwei Skripte nacheinander einbindet und in beiden kommt window.onload = blabla drin vor, dann überschreibt das zweite das erste skript und es wird nur eins ausgeführt.
Korrekt. Aber die "schlichte" Schreibweise hat einen Vorteil: Sie funktioniert - und zwar in allen JS-Browsern gleichermaßen.
Und niemand hindert dich, die aktuell notierte Funktion auszulesen, und in einer neuen Funktion wieder zu verwenden ...
Gruß, Cybaer
hi,
Aber mit addEventListener kann man jedem Element ein onload Eventhandler zuweisen, oder nicht?
Klar kannst du es _machen_ - aber die Browser werden nicht darauf reagieren.
gruß,
wahsaga
Lieber Roland,
else if (document.getElementsByTagName['body'][0].attachEvent)
und
document.getElementsByTagName['body'][0].attachEvent('onload', init);
verwenden "getElementsByTagName['body']", also mit eckigen Klammern (Array-Schreibweise) anstatt runder Klammern (Funktionsaufruf)... War es das?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
verwenden "getElementsByTagName['body']", also mit eckigen Klammern (Array-Schreibweise) anstatt runder Klammern (Funktionsaufruf)... War es das?
Mit Sicherheit nicht, er will den onload Event des window Objektes und nicht eines HTML Elementes setzen und einen Funktionsaufruf mit eckigen Klammern???
Struppi.
Hallo Struppi,
ich glaube, Felix wollte nur darauf hinweisen, dass es getElementsByTagName('body') heist, und nicht getElementsByTagName['body']. Ich habe es auch übersehen.
Gruß, Jürgen
ich glaube, Felix wollte nur darauf hinweisen, dass es getElementsByTagName('body') heist, und nicht getElementsByTagName['body']. Ich habe es auch übersehen.
oops stimmt, und das soll im firefox laufen? naja.
Struppi.
hi,
oops stimmt, und das soll im firefox laufen?
Natürlich - weil der window.addEventListener kennt, und deshalb nicht in den else-Teil geht, in dem dieser fehlerhafte Code steht.
gruß,
wahsaga
Natürlich - weil der window.addEventListener kennt, und deshalb nicht in den else-Teil geht, in dem dieser fehlerhafte Code steht.
Ist ja gut, ich geht jetzt Fernseh glotzen
Struppi.
oh nein,
jetzt ist die boardsmilieseuche auch hier angelangt :/
Tschö
jetzt ist die boardsmilieseuche auch hier angelangt :/
Die Leute lieben das. Ich muss denen noch das hier einbauen:
(keine Ahung wofür der stehen soll)
Struppi.
Hi,
Die Leute lieben das.
Yeah!
(keine Ahung wofür der stehen soll)
Ich mach dich platt!?
Gruß, Cybaer
Hallo,
Die Leute lieben das. Ich muss denen noch das hier einbauen:
(keine Ahung wofür der stehen soll)
Smileys bitte nur mit title-Attribut!
Gruß plan_B
Smileys bitte nur mit title-Attribut!
Struppi.
Hi Roland AKA Computer Freak,
BTW: Kleiner Hinweis bezügl. Cross-/Multiposts (bzw. ausführlichere Erläuterung)
BTW: [url=http://forum.jswelt.de/javascript/37388-onlinescript-zum-downloaden-von-youtubevideos.html#post243436]Kleiner Hinweis bezügl. Cross-/Multiposts[/url] (bzw. [url=http://forum.jswelt.de/javascript/37388-onlinescript-zum-downloaden-von-youtubevideos.html#post243886]ausführlichere Erläuterung[/url]) ;)
Gruß, Cybaer