David: document.getElementById

Hallo,

ich habe nur eine kleine Frage bezüglich einer Fehlermeldung im Firefox.
Ich habe im <script> Tag folgendes notiert:
/* <![CDATA[ */
document.getElementById("body").onload = alert("");
/* ]]> */
Nur um zu sehen ob das auch funktioniert, weil ich beim Laden gerne eine Funktion zum erstellen von dynamischem Inhalt ausführen möchte. Zwar erscheint meine kleine alert-Box, doch gleichzeitig gibt Firefox auch eine Fehlermeldung aus:
document.getElementById("body") has no properties.
Was heißt das und wie lässt sich diese Meldung vermeiden?
Im Html-Quelltext steht beim body auch id="body", also da ist wirklich alles korrekt, sonst würde es ja keine alert-Box geben.
Eine kleine Frage nebenbei, wie sieht das eigentlich aus zwischen "" und '' in Javascript? Gibt es da Unterschiede wie z. B. in PHP? Dort kann man ja bei den "" Variablen einbaun, oder war das bei den ''? Also bei einem von beidem muss man in PHP die Variablen seperat notieren, also
$var = 'foo'.$bar;
Außerdem werden in PHP die einfachen Hochkommata ('') schneller ausgeführt. Aber wie gesagt, die Frage ist nur nebenbei gestellt ;-)

Liebe Grüße,
David

  1. document.getElementById("body").onload = alert("");

    Das ist schon Unsinn, du weist dem onload Eventhandler den Rückgabewert von alert() zu, der ist immer undefiniert, d.h. es passiert gar nicht nach dem laden. Ein Eventhandler braucht eine Funktionsreferenz.

    document.getElementById("body") has no properties.

    Naja, du kannst auf eine Element erst zugreifen wenn es geladen wurde. In deinem Falle ist es sowieso das falsche Element was du ansprichst.

    du willst eigentlich:

    window.onload = function() {  
    alert('');  
    }
    

    Struppi.

    1. document.getElementById("body").onload = alert("");

      Das ist schon Unsinn, du weist dem onload Eventhandler den Rückgabewert von alert() zu, der ist immer undefiniert, d.h. es passiert gar nicht nach dem laden. Ein Eventhandler braucht eine Funktionsreferenz.

      Hallo,

      das verstehe ich nicht ganz. alert() ist doch eine Funktion oder? Wenn ich nun irgendeine Funktion schreiben würde, wie müsste die "Funktionsreferenz" aussehen?

      window.onload = function() {
      alert('');
      }

      Ah ich verstehe glaube gerade, was du meinst. Aber warum ist hier ein Rückgabewert gegeben und bei meinem Beispiel nicht? Das verstehe ich nicht ganz, weil bei beidem ja eigentlich die alert() Funktion aufgerufen wird.

      Liebe Grüße,
      David

      1. Hallo David.

        window.onload = function() {
        alert('');
        }

        Ah ich verstehe glaube gerade, was du meinst. Aber warum ist hier ein Rückgabewert gegeben und bei meinem Beispiel nicht?

        In beiden ist einer gegeben. Probiere einmal folgendes aus:

        javascript:alert(typeof(alert("Foo")));

        Als erstes siehst du die Ausgabe und als zweites den Rückgabewert der alert-Funktion.

        Das verstehe ich nicht ganz, weil bei beidem ja eigentlich die alert() Funktion aufgerufen wird.

        Ja, aber in Struppis Variante wird dem onload-Event eine anonyme Funktion zugewiesen. Da dies einer Definition gleicht, wird diese nicht sofort, sondern erst beim Eintreffen dieses Events aufgerufen. (Definierst du eine Funktion auf reguläre Art und Weise, wird sie ja auch nicht automatisch aufgerufen.)

        Einen schönen Mittwoch noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
      2. hi,

        das verstehe ich nicht ganz. alert() ist doch eine Funktion oder?

        Nein, das ist der Aufruf der Funktion, auf die der Bezeichner alert referenziert.

        Wenn ich nun irgendeine Funktion schreiben würde, wie müsste die "Funktionsreferenz" aussehen?

        S.o.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. window.onload = function() {
        alert('');
        }

        Ah ich verstehe glaube gerade, was du meinst. Aber warum ist hier ein Rückgabewert gegeben und bei meinem Beispiel nicht? Das verstehe ich nicht ganz, weil bei beidem ja eigentlich die alert() Funktion aufgerufen wird.

        Nein, in meinem Beispiel wird nicht alert() aufgerufen, sondern dem Eventhandler onload eine anonyme Funktion zugewiesen, diese anonyme Funktion wird aufgerufen, wenn der Event eintritt und dann wird erst alert() aufgerufen.

        Struppi.

  2. EDIT: Ich glaube, es funktioniert nicht, weil das Element zu dem Zeitpunkt noch nicht existiert, als die Funktion aufgerufen wird. Lässt sich das irgendwie so drehen, dass ich den script-Tag nicht nach unten setzen muss, weil ich ihn schon gerne im head-Bereich hätte.