Simon: Funktionen aufrufen

hallo,
ich absoluter anfänger, was javascript u.ä. angeht.

ich habe eine html- datei, in der eine javascript funktion (die in einer eigenen datei gespeichert ist), aufgerufen werden soll. diese funktion soll wiederum html- tags zurückgeben.

folgendes habe ich versucht:

html-datei:

<body>
<table> ...

<script type="text/javascript" src="script.js">
window.onload = function(){
gibtags(20);}
</script>

</table></body>

javascript datei (script.js):

function gibtags(anzahl){
 for (var i=1;i<=anzahl;i++){
  document.write('<td> Zeile1 Zelle');
  document.write(i)
 } //for
} //fn gibtags

Probleme:

  • Der sonstige Html- Inhalt wird überhaupt nicht mehr angezeigt.
  • Die durch durch das script erzeugten tags werden auch nicht korrekt umgesetzt (die elemente werden einfach untereinander aufgelistet, statt nebeneinander (<td>)).
  • ich habe auch schon versucht den javascript-block in der html-Datei an anderen stellen (direkt vor </body>; im <head>) einzufügen, aber es wird immer noch nicht korrekt angezeigt.

bedenkt, dass ich ein anfänger bin, vielleicht ist es ein entsprechend "dummer" fehler.
vielen dank,
simon

  1. Hallo!

    Das Problem liegt in diesen 2 Zeilen:

    window.onload = function(){gibtags(20);}
    document.write('<td> Zeile1 Zelle');

    Das Problem ist, dass du die Funktion aufrufst, nachdem der Browser das gesamte Dokument gelesen (gerendert) hat. Die Lösung ist, dass du den Code dann mit JS erzeugst, wenn auch der Rest des Dokumentes gerendert wird, oder du fügst den Code per DOM ein.

    window.onload sagt dem Browser "wenn du das Dokument *fertig* gerendert hast, dann ...". Aber document.write muss ausgeführt werden, *während* das Dokument gerendert wird.

    Also schreibst du am besten deine Funktion an die Stelle im HTML, in dem der Quelltext dann stehen soll und rufst diese nicht per onload auf.

    ciao, ww

    --
    Ein japanisch-deutsches Gedicht
    sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
    1. hat funktioniert!

      danke euch beiden!

      mfg
      Simon

  2. Moin,

    ich absoluter anfänger, was javascript u.ä. angeht.

    das waren wir alle mal. :-)

    folgendes habe ich versucht:
    html-datei:

    <body>
    <table> ...

    <script type="text/javascript" src="script.js">
    window.onload = function(){
    gibtags(20);}
    </script>

    Dieses Konstrukt ist so falsch. *Entweder* du notierst den JS-Code direkt im Dokument zwischen <script> und </script>, *oder* in einer externen Datei, die du mit dem src-Attribut einbindest. Aber nicht beides zusammen.
    Fasse beide Teile deines Scripts zu einem zusammen, oder mach zwei <script>-Blöcke im Quelltext, einen direkt mit JS-Code, einen mit dem src-Verweis auf die separate Datei.

    javascript datei (script.js):

    function gibtags(anzahl){
    for (var i=1;i<=anzahl;i++){
      document.write('<td> Zeile1 Zelle');
      document.write(i)
    } //for
    } //fn gibtags

    Diese Funktion gibt nichts zurück, sondern schreibt Daten direkt ins Dokument. Dein Problem ist, dass du die Funktion erst aufrufst, nachdem das Dokument fertig geladen ist (onload). Wenn du *danach* nochmal document.write() aufrufst, wird das gesamte Dokument gelöscht und mit dem neu ausgegebenen Code überschrieben.

    Um HTML-Code dynamisch mit JS zu erzeugen, hast du zwei Möglichkeiten.
    Die einfache Methode ist document.write(), wie du es schon versucht hast - das darf aber nur passieren, *während* das Dokument geladen und interpretiert wird. Das Script muss also an der Stelle, wo der dynamisch erzeugte Inhalt entstehen soll, im Code stehen. Nachteil: Sobald das Dokument mal geladen ist, geht nichts mehr. Nachträgliches Verändern (Erweitern, Ergänzen) geht mit dieser Methode nicht.

    Der anspruchsvollere, aber auch mächtigere Weg ist die Manipulation des Dokuments über die DOM-Methoden (Document Object Model), bei der du mit Javascript nicht den Quellcode erzeugst, sondern direkt auf die Elementstruktur, den Elementbaum zugreifst, wie sie vom Browser intern verarbeitet werden. Als Einstieg in Javascript würde ich dir das aber nicht empfehlen, sondern du solltest erst einmal mit einfacheren Aufgaben ein Gefühl für die Sprache und die Möglichkeiten (und Grenzen) bekommen.

    So long,
     Martin

    --
    Man gewöhnt sich an allem, sogar am Dativ.