Roland: [JavaScript] Registrierung von Eventhandlern

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?

  1. 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

    1. 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.

      1. 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

        1. 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?

          1. 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

    2. 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?

      1. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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?

          1. 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

            1. 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...

              1. 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

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          2. 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

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. 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.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. 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.

      1. 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

        1. 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.

          1. 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

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. 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.

              1. oh nein,

                jetzt ist die boardsmilieseuche auch hier angelangt :/

                Tschö

                1. 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.

                  1. Hi,

                    Die Leute lieben das.

                    Yeah!

                    (keine Ahung wofür der stehen soll)

                    Ich mach dich platt!?

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                  2. 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

                    --
                         *®*´¯`·.¸¸.·
                    1. Smileys bitte nur mit title-Attribut!

                      Struppi.

  3. 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

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!