Dieter Raber: Argumente bei document.onload

Hallo,

Ich habe ein Webseite mit den zwei Elementen namens 'foo' und 'bar'. Im Kopf ist eine Javascript-Datei mit der Funktion 'mach_was(arg1)' eingebunden. mach_was() kann nicht onload aufgerufen werden, weil 'foo' und 'bar' dann noch nicht existieren. Bleibt also die Lösung <script...>document.onload = mach_was</script> irgendwann, nachdem die beiden existieren. Das Problem ist, dass ich dann an mach_was() keine Argumente mehr überreichen kann.
Gibt es dafür eine Lösung?
BTW, kann man document.onload eigentlich mehrfach aufrufen?

Danke erstmal.

Dieter

  1. Moin!

    Ich habe ein Webseite mit den zwei Elementen namens 'foo' und 'bar'. Im Kopf ist eine Javascript-Datei mit der Funktion 'mach_was(arg1)' eingebunden. mach_was() kann nicht onload aufgerufen werden, weil 'foo' und 'bar' dann noch nicht existieren.

    Wann, wenn nicht nach Fertigladen der Seite, existieren deine Elemente denn?

    Der Javascript-Code in <body onload="..."> wird doch erst zum Zeitpunkt des onload interpretiert ausgeführt. Also sollten auch Parameter und Elemente kein Problem sein und existieren.

    Bleibt also die Lösung <script...>document.onload = mach_was</script> irgendwann, nachdem die beiden existieren. Das Problem ist, dass ich dann an mach_was() keine Argumente mehr überreichen kann.

    Diese Lösung ist der mit dem onload-Attribut gleichwertig.

    BTW, kann man document.onload eigentlich mehrfach aufrufen?

    Das kann man nicht "aufrufen", weil es eine Objekt-Eigenschaft, also sozusagen eine Variable ist. Rufst du Variablen auf? Ich nicht. :)

    - Sven Rautenberg

    1. Moin,

      BTW, kann man document.onload eigentlich mehrfach aufrufen?

      Das kann man nicht "aufrufen", weil es eine Objekt-Eigenschaft, also sozusagen eine Variable ist. Rufst du Variablen auf? Ich nicht. :)

      Hmm, ich schon (kind of):
        foo = window.alert; foo("hallo");

      Was meine Glaskugel aber sagt was der OP sucht ist etwas in der Art von
        document.onload = function() {mach_was(foo); mach_was_anderes(bar);};

      --
      Henryk Plötz
      Grüße aus Berlin
      ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
      ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    2. Hi Sven,

      Wann, wenn nicht nach Fertigladen der Seite, existieren deine Elemente denn?

      Ich hab mich da etwas unglücklich ausgedrückt. Wenn im Script (in <head>) steht
      var foo = document.getElementById('bar');
      meldet Mozilla pflichtgemäss, dass er ein Element namens 'bar' nicht kennen würde, weil es halt noch nicht da ist.

      Diese Lösung ist der mit dem onload-Attribut gleichwertig.

      ausser, dass keine Argumente akzeptiert werden ;-(

      Das kann man nicht "aufrufen", weil es eine Objekt-Eigenschaft, also sozusagen eine Variable ist. Rufst du Variablen auf? Ich nicht. :)

      Jo, ständig: "sitz still, foo" oder "bar, hör sofort auf undefined zu sein". Alles eine Frage der richtigen Kinderstube ;-)

      Dieter

      1. Hallo,

        var foo = document.getElementById('bar');

        Gemeint ist global, nicht innerhalb einer Funktion

        Dieter

      2. Moin!

        Ich hab mich da etwas unglücklich ausgedrückt. Wenn im Script (in <head>) steht
        var foo = document.getElementById('bar');
        meldet Mozilla pflichtgemäss, dass er ein Element namens 'bar' nicht kennen würde, weil es halt noch nicht da ist.

        var foo;

        function...{
        foo = document.getElementById('bar');
        }

        <body onload="function...">

        - Sven Rautenberg

        1. Aha, das klingt gut, werd ich gleich mal testen.

          Dankeschoen!

          Dieter

  2. Hallo,

    BTW, kann man document.onload eigentlich mehrfach aufrufen?

    indirekt ja, du kannst onload definieren:
     window.onload=function(){ ... }
    und anschliessend verwenden, z.B. so:
     window.onResize = window.onload;
    und, vgl. auch http://www.lipfert-malik.de/webdesign/tutorial/css.html#nurEinOnload,
    onload kann auch abgefragt und verändert oder ergänzt werden.

    Grüsse

    Cyx23