Kalle_B: Initialisierung bei onLoad aufrufen

Hallöle,

ich möchte erreichen, dass eine in HTML eingebundene Javascript- Routine sich selbst aufruft, wenn die Seite geladen ist.

So funktioniert es:

sortable_tables.js
------------------

function sortable_init() {  
...  
}

<script type="text/javascript" src="sortable_tables.js"></script>
...
<body onLoad="sortable_init()">

Und so hätte ich es gerne:

sortable_tables.js
------------------

function sortable_init() {  
...  
}  
body.onLoad = sortable_init();  

<body>

Aber alle Schreibweisen wie
body.onLoad = sortable_init();
body.onLoad = sortable_init;
window.onLoad = sortable_init;
document.onLoad = sortable_init;

führten nicht zum Erfolg, brachten aber weder in Opera noch FF Fehlermeldungen.

Logischerweise ist onLoad doch ein Event von body - oder?

Gruß, Kalle

body.onLoad = sortable_init()

  1. Hi,

    Aber alle Schreibweisen wie
    body.onLoad = sortable_init();
    body.onLoad = sortable_init;
    window.onLoad = sortable_init;
    document.onLoad = sortable_init;

    führten nicht zum Erfolg, brachten aber weder in Opera noch FF Fehlermeldungen.

    Natürlich, neue Eigenschaften kannst du Objekten ja verpassen, wie du lustig bist.

    Logischerweise ist onLoad doch ein Event von body - oder?

    Als HTML-Attribut schon (und auch da kleingeschrieben, wenigstens wenn XHTML).

    Aus JavaScript heraus aber musst du window.onload nutzen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Hi!

    Da gibt es lesenswerte Diskussion im hiesigen Archiv - z.B. diese.

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  3. Hallo,

    ich möchte erreichen, dass eine in HTML eingebundene Javascript- Routine sich selbst aufruft, wenn die Seite geladen ist.

    nichts leichter als das, sagte Frederick. ;-)

    <body onLoad="sortable_init()">

    Auch wenn diese Methode weniger elegant ist, wäre es keine schlechte Idee, den Eventhandler hier richtig zu schreiben (okay, HTML ist gnädig, aber XHTML nicht, Javascript auch nicht).

    Und so hätte ich es gerne:

    sortable_tables.js

    function sortable_init() {

    ...
    }
    body.onLoad = sortable_init();

      
    Haha, falsch gedacht. Eventhandler, die als Attribut des HTML-Elements body notiert werden, sind in Wirklichkeit dem Javascript-Objekt window zugeordnet.  
      
    
    > Aber alle Schreibweisen wie  
    > body.onLoad = sortable\_init();  
    > body.onLoad = sortable\_init;  
    > window.onLoad = sortable\_init;  
    > document.onLoad = sortable\_init;  
    > führten nicht zum Erfolg  
      
    Nein. Erstens hast du das falsche Objekt gewählt - window anstatt body wäre angesagt. Zweitens ist, wie oben schon erwähnt, die Schreibweise des Eventhandlers falsch; sonst hätte nämlich die zweite Variante das geleistet, was du erwartest.  
      
    
    > brachten aber weder in Opera noch FF Fehlermeldungen.  
      
    Natürlich nicht. Es ist ja auch kein Fehler, einem existierenden Javascript-Objekt beliebige neue Eigenschaften anzuhängen.  
      
    
    > Logischerweise ist onLoad doch ein Event von body - oder?  
      
    Hier versagt die Logik. Und nochmal: Der Eventhandler heißt "onload".  
      
    Ciao,  
     Martin  
    
    -- 
    Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.  
    
    
    1. hatte folgenden Fehler gemacht:

      window.onload = sortable_init;

      <body onload=""><!-- als Platzhalter stehen gelassen -->

      ... habe den Eventhandler also erst gesetzt und dann wieder gelöscht.

      Danke für die Hilfe. Jetzt geht's.
      Kalle

    2. Natürlich nicht. Es ist ja auch kein Fehler, einem existierenden Javascript-Objekt beliebige neue Eigenschaften anzuhängen.

      Was heisst "anhängen"?

      Dann wäre

      window.onload = sortable_init;

      <body onload=""><!-- als Platzhalter stehen gelassen -->

      doch kein Problem. Ich hänge dem Eventhandler "nichts" an. Aber der löscht offenbar den vorherigen Inhalt.

      Kalle

      1. Hi,

        Natürlich nicht. Es ist ja auch kein Fehler, einem existierenden Javascript-Objekt beliebige neue Eigenschaften anzuhängen.

        Was heisst "anhängen"?

        Einem JavaScript-Objekt kannst du beliebige neue Eigenschaften verpassen, die es bisher noch nicht hatte - einfach, in dem du der Eigenschaft einen Wert zuweist.

        Dann wäre

        window.onload = sortable_init;

        <body onload=""><!-- als Platzhalter stehen gelassen -->

        doch kein Problem. Ich hänge dem Eventhandler "nichts" an. Aber der löscht offenbar den vorherigen Inhalt.

        Natürlich löscht es den.

        Ein onload-Attribut im BODY-Tag und eine Zuweisung an window.onload werden vom Browser gleich behandelt.

        Wenn du jetzt erst in deinem Script window.onload eine Funktionsreferenz zugewiesen hast, und der Browser danach auf ein onload-Attribut im BODY-Tag trifft, dann überschreibt er den bisherigen Handler für den Load-Event mit einem neuen, in dem er den Inhalt des Attributes in eine Funktionsreferenz übersetzt - bei leerem Attributwert halt in eine „leere“ Funktion, die einfach nichts macht (bzw. in so etwas wie void oder null).

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Hi,

          Was heisst "anhängen"?

          Ich hatte das so verstanden: Wenn ich einem Zug mit drei Anhängern keinen weiteren "anhänge", hat er immer noch drei.

          Ihr versteht es so:

          Einem Zug kann man Anhänger anhängern. Zuerst sind es drei, aber dann widerruft das jemand und sagt: "Es wird keiner angehängt".

          Ist der Unterschied jetzt richtig interpretiert?

          Kalle

          1. Hi,

            Was heisst "anhängen"?

            Ich hatte das so verstanden: Wenn ich einem Zug mit drei Anhängern keinen weiteren "anhänge", hat er immer noch drei.

            Wenn du einem JS-Objekt eine *neue* Eigenschaft „anhängst“, in dem du sie einfach durch Zuweisung eines Wertes erzeugst, dann betrifft das die vorher bereits vorhandenen Eigenschaften nicht.

            window.ich_lerne_JavaScript = "im SELFHTML Forum";
            erzeugt eine neue Eigenschaft am window-Objekt (sofern es vorher noch keine dieses Namens gab), mit dem Bezeichner ich_lerne_JavaScript und dem (Text-)Inhalt "im SELFHTML Forum".

            Ihr versteht es so:

            Einem Zug kann man Anhänger anhängern. Zuerst sind es drei, aber dann widerruft das jemand und sagt: "Es wird keiner angehängt".

            Ist der Unterschied jetzt richtig interpretiert?

            Nein.

            window hatte schon den Anhänger namens onload, dadurch dass du in deinem Script einen Wert zugewiesen hast.

            Wenn du jetzt noch onload als Attribut von BODY notierst, dann wird der alte Inhalt des Anhängers ausgeladen und weggeworfen, und neuer Inhalt hineingepackt - der alte ist damit weg, futsch, nicht mehr verfügbar.

            Es geht hier um das zweimalige Beladen des *selben* Anhängers.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          2. @@Kalle_B:

            nuqneH

            Ist der Unterschied jetzt richtig interpretiert?

            Nein, AFAIS.

            Du kannst beliebig viele Wagons an den Zug anhängen – sowohl beladene (wie "onload", no pun intended) als auch leere (wie "onLoad").

            Hängst du allerdings einen Wagon "onload" an, so wird ein eventuell schon im Zug befindlicher gleichnamiger Wagon abgekoppelt.

            Qapla'

            --
            Volumen einer Pizza mit Radius z und Dicke a: pi z z a
          3. Ihr versteht es so:

            Einem Zug kann man Anhänger anhängern. Zuerst sind es drei, aber dann widerruft das jemand und sagt: "Es wird keiner angehängt".

            Kennt ihr das Problem, dass ihr ein "Anwenderhandbuch / Bedienungsanleitung" schreibt (okay, ist ein Begriff aus dem EDV- Mittelalter - 15 Jahre her), jetzt heisst es wohl Tutorial und kann trotzdem deutsch sein) - und der Anwender versteht euch nicht?

            Hier im Forum liest man immer über den Kampf mit der Maschine.

            Aber wie erlebt ihr die andere Seite - eure Kunden?

            Ich schlage mich ständig mit diesem Problem rum. Bei geschlossenen Benutzergruppen geht es ja noch, da kommen Fragen und Rückmeldungen, weil die Leute gezwungen sind, mit den Programmen zu arbeiten.

            Problematischer ist es bei öffentlichen Programmen wie meinem Veranstaltungskalender. Da registrieren sich Leute und schalten das Konto nicht frei. Oder sie schalten es frei und geben keine Events ein. Dann grüble ich: Was ist schief gelaufen?

            Manchmal gibt es Mail- und Telefonkontakte. Manchmal sind es Programmierfehler, eine Kombination, die ich zu testen vergaß, aber viel öfter Verständigungsprobleme. Vorgestern hatten wir hier das Thema Veranstaltungsreihe.

            Okay, ich bin keine Maschine, die mit anderen Maschinen im definierten Binärcode Daten austauscht, sondern ein Mensch, der sich mit analoger (ungenauer) Sprache benüht, sich anderen Menschen verständlich zu machen.

            Nicht immer von Erfolg gekrönt.

            Kalle

            Natürlich haben Programme Fehler, selbst Winzigweich stellt Beta- Versionen für die Freaks zum Testen bereit.

            Ich habe leider kaum Freaks (na gut, zwei, drei)

            Ist es

            Manchmal kommt per Mail eine NAchfrage.

            "Tutorial" und ist in fremder Sprache) und der englische Anwender versteht - trotz gleicher Sprache - etwas ganz anderes?

            Und wie erreicht ihr eigentlich deutsche Anwender? Fallen die hinten runter?

            Ist der Unterschied jetzt richtig interpretiert?

            Kalle

            1. Kalle

              Jetzt bin ich selbst auf ein typisches Problem hereingefallen (sehr vorgerückte Stunde, ein übervoller Arbeitstag und zwei Glas Wein).

              Man schickt etwas ab, ohne die Fußnote oder den Müll zu bemerken, der noch untern steht, ähhh - anhängt. Man würde ihn sehen können, wenn man scrollt, aber warum sollte man scrollen? Der Button "Nachricht absenden" ist ja ohne Scroll erreichbar.

              Hier der Schrott, den ich erst nach dem Absenden gesehen habe. Bitte löschen.

              Natürlich haben Programme Fehler, selbst Winzigweich stellt Beta- Versionen für die Freaks zum Testen bereit.

              Ich habe leider kaum Freaks (na gut, zwei, drei)

              Ist es

              Manchmal kommt per Mail eine NAchfrage.

              "Tutorial" und ist in fremder Sprache) und der englische Anwender versteht - trotz gleicher Sprache - etwas ganz anderes?

              Und wie erreicht ihr eigentlich deutsche Anwender? Fallen die hinten runter?

              Ist der Unterschied jetzt richtig interpretiert?

              Kalle1

      2. Hi,

        Natürlich nicht. Es ist ja auch kein Fehler, einem existierenden Javascript-Objekt beliebige neue Eigenschaften anzuhängen.
        Was heisst "anhängen"?

        "anhängen" heißt, etwas hinzuhängen, was vorher nicht da war.

        Dann wäre

        window.onload = sortable_init;

        <body onload=""><!-- als Platzhalter stehen gelassen -->

        doch kein Problem. Ich hänge dem Eventhandler "nichts" an.

        Falsch. Du hängst ihm einen String der Länge 0 an, der intern in
         window.onload = function() {};
        konvertiert wird. Und diese leere Funktion überschreibt den vorher gesetzten, sinnvollen Eventhandler. Du reißt sozusagen das Rundschreiben der Geschäftsleitung vom schwarzen Brett ab und hängst stattdessen ein leeres Blatt hin.

        Aber ich hatte das mit dem "Anhängen" auch anders gemeint: Niemand verbietet dir, dem window-Objekt eine Eigenschaft "onLoad" zu geben, die es vorher noch nicht hat. Nur hat das keine Auswirkungen.

        Ciao,
         Martin

        --
        Letztlich basiert alles auf dem Feuer, dem Rad, der Eins und der Null.
          (Gernot Back)
  4. @@Kalle_B:

    nuqneH

    body.onLoad = sortable_init();

    Gar nicht so einfach, gleich drei Fehler in einer Codezeile unterzubringen.

    Die zwei vor dem Gleichheitszeichen wurden schon genannt.

    Die Klammern sind auch falsch; denn du willst dem Eventhandler die Funktion 'sortable_init' zuweisen, nicht deren Rückgabewert.

    Qapla'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a
    1. Hallo,

      body.onLoad = sortable_init();
      Gar nicht so einfach, gleich drei Fehler in einer Codezeile unterzubringen.

      gemein! ;-)

      Die zwei vor dem Gleichheitszeichen wurden schon genannt.

      Auch den nach dem Gleichheitszeichen hatte ich schon wahrgenommen; ich konnte nur leider nicht bis drei zählen.

      So long,
       Martin

      --
      Der Mensch denkt, Gott lenkt.
      Der Mensch dachte, Gott lachte.
      1. @@Der Martin:

        nuqneH

        gemein! ;-)

        s/mein/recht ;-)

        ich konnte nur leider nicht bis drei zählen.

        Und Moses konnte nur leider nicht bis elf zählen.

        Qapla'

        --
        Volumen einer Pizza mit Radius z und Dicke a: pi z z a