Enrico: Anzeige "undefined" bei Tabellenerstellung

Hallo,

ich hatte mich wohl doch leider zu früh gefreut, die Ausgabe eines zwei-dimensionalen Arrays
in Tabbelform klappt doch nicht.

Hier - der Vollständigkeit halber - noch einmal eine Auflistung der integrierten Dateien:

----------
INDEX.html
----------

<html>
     <head>
       <script type="text/javascript" src="BIBLIOTHEKEN/JAVASCRIPT/DATENBANK.js"></script>
       <script type="text/javascript" src="BIBLIOTHEKEN/JAVASCRIPT/FUNKTIONEN.js"></script>
       <script type="text/javascript" src="BIBLIOTHEKEN/JAVASCRIPT/SORTIEREN.js"></script>
     </head>
     <body onload="Tabelle_ausgeben('Details','Film');">
       <table id="Datenbank">
         <tr>
           <th>DVD-Nr.</th>
           <th>Titel</th>
           <th>Inhalt</th>
           <th>Genre</th>
           <th>FSK</th>
         </tr>
         <tbody id="Details"></tbody>
       </table>
     </body>
   </html>

------------
DATENBANK.js
------------

Definition der einzelnen Filme nach folgendem Muster:

Film=new Array();

Film[0]={DVD_Nr:1, Titel:"DIE SIEGER", Inhalt:"...", Genre:"Action / Thriller", FSK:16};

-------------
FUNKTIONEN.js
-------------

Beinhaltet die Ausgabefunktion für die Tabellen:

function Tabelle_ausgeben(tbody,Inhalt)
   {
     var tr, td;
     tbody = document.getElementById(tbody);

for (var i = 0; i < Inhalt.length; i++)
     {
       tr = tbody.insertRow(tbody.rows.length);
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("align", "center");
       td.innerHTML = Inhalt[i].DVD_Nr;
       td = tr.insertCell(tr.cells.length);
       td.innerHTML = Inhalt[i].Titel;
       td = tr.insertCell(tr.cells.length);
       td.innerHTML = Inhalt[i].Inhalt;
       td = tr.insertCell(tr.cells.length);
       td.innerHTML = Inhalt[i].Genre;
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("align", "center");
       td.innerHTML = Inhalt[i].FSK;
     }
   }

Leider scheint die Übergabe nicht richtig zu funktionieren, da
ich nur folgende Ausgabe habe:

+-----------+-----------+-----------+-----------+-----------+
| DVD-Nr.   | Titel     | Inhalt    | Genre     | FSK       |
+-----------+-----------+-----------+-----------+-----------+
| undefined | undefined | undefined | undefined | undefined |
| undefined | undefined | undefined | undefined | undefined |
| undefined | undefined | undefined | undefined | undefined |
| undefined | undefined | undefined | undefined | undefined |
+-----------+-----------+-----------+-----------+-----------+

Das Array wird nicht komplett durchlaufen, zudem werden keine
Werte übergeben.

Ich hoffe, Ihr könnt mir weiterhelfen, es ist sehr frustrierend,
wenn immer irgendetwas nicht klappt.

Vielen lieben Dank schon mal :-)

Gruß,
Enrico

  1. Das Array wird nicht komplett durchlaufen, zudem werden keine
    Werte übergeben.

    Hier …

    <body onload="Tabelle_ausgeben('Details','Film');">

    … übergibst Du zwei Texte, "Details" und "Film", da …

    function Tabelle_ausgeben(tbody,Inhalt)
       {

    for (var i = 0; i < Inhalt.length; i++)

    … erwartest Du an zweiter Position ein Feld.

    1. Hallo,

      hmmm, ich stehe wohl auf dem Schlauch...

      Der Text "Details" ist die Bezeichnung des div-Bereiches, in dem
      die jeweiligen Tabellen dynamisch ausgegeben werden sollen, mit
      dem Bezeichner "Film" ist das Array "Film" gemeint...

      Was muß ich konkret korrigieren, damit die Ausgabe klappt ?

      Gruß,
      Enrico

      1. <body onload="Tabelle_ausgeben('Details','Film');">

        … übergibst Du zwei Texte, "Details" und "Film", da

        Der Text "Details" ist die Bezeichnung des div-Bereiches, in dem
        die jeweiligen Tabellen dynamisch ausgegeben werden sollen, mit
        dem Bezeichner "Film" ist das Array "Film" gemeint...

        Überlege doch mal, wie benutzt man Variablen? Wie hast Du die Feldvariable Film denn bestückt, mit "Film"=new Array();?

        1. Wenn ich die einfachen Anführungsstriche weglasse, dann tut sich leider auch nichts.

          Tabelle_ausgeben('Details',Film);

          function Tabelle_ausgeben(tbody,Inhalt)
          {
            var tr, td;
            tbody = document.getElementById(tbody);

          for (var i = 0; i < Inhalt.length; i++)
            {
              tr = tbody.insertRow(tbody.rows.length);
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].DVD_Nr;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Titel;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Inhalt;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Genre;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].FSK;
            }
          }

          An die Funktion "Tabelle_ausgeben" soll zum einen der Name des zu füllenden div-Bereiches
          ('Details') und zum anderen das auszugebende Array (Film) übergeben werden.

          Ich habe keine Ahnung, warum es nicht klappt.

          1. Wenn ich die einfachen Anführungsstriche weglasse, dann tut sich leider auch nichts.

            Der Code funktioniert in unten angehängter Form einwandfrei, der Unterschied ist lediglich, dass die Javascript-Teile nicht aus separaten Dateien kommen.

            Prüfe mit einigen alert(Film);, wo die Variable Film Dir entfleucht.

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
            <html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
            <title></title>

            <script type="text/javascript">
            Film=new Array();

            Film[0]={DVD_Nr:1, Titel:"DIE SIEGER", Inhalt:"...", Genre:"Action / Thriller", FSK:16};
            Film[1]={DVD_Nr:2, Titel:"Fast Times at Ridgemont High", Inhalt:"...", Genre:"Komödie", FSK:16};
            Film[2]={DVD_Nr:3, Titel:"The Goonies", Inhalt:"...", Genre:"Abenteuer", FSK:6};
            Film[3]={DVD_Nr:4, Titel:"Empire of the Sun", Inhalt:"...", Genre:"Drama", FSK:12};

            function Tabelle_ausgeben(tbody,Inhalt) {
             var tr, td;
             tbody = document.getElementById(tbody);

            for (var i = 0; i < Inhalt.length; i++) {
              tr = tbody.insertRow(tbody.rows.length);
              td = tr.insertCell(tr.cells.length);
              td.setAttribute("align", "center");
              td.innerHTML = Inhalt[i].DVD_Nr;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Titel;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Inhalt;
              td = tr.insertCell(tr.cells.length);
              td.innerHTML = Inhalt[i].Genre;
              td = tr.insertCell(tr.cells.length);
              td.setAttribute("align", "center");
              td.innerHTML = Inhalt[i].FSK;
                }
            }

            </script>

            </head>

            <body onload="Tabelle_ausgeben('Details',Film);">
            <table id="Datenbank">
            <tr>
             <th>DVD-Nr.</th>
             <th>Titel</th>
             <th>Inhalt</th>
             <th>Genre</th>
             <th>FSK</th>
             </tr>
            <tbody id="Details"></tbody>
            </table>

            </body>
            </html>

          2. Ich habe das Problem gefunden :-)

            Es lag an meinem mehrdimensionalen Array habe ich eine Definition übersehen,
            so dass ein "Genre"-Element nicht korrekt zugeordnet werden konnte und deshalb
            wurde das komplette Array, aus welchen Gründen auch immer, nicht angezeigt.

            Jetzt klappt alles :-)

            Eure Korrekturhinweise haben mir sehr geholfen :-)

            Gruß,
            Enrico

  2. Grütze .. äh ... Grüße!

    <body onload="Tabelle_ausgeben('Details','Film');">

    Du übergibst nur den String 'Film', nicht das Array. Keine Anführungszeichen verwenden

    <body onload="Tabelle_ausgeben('Details',Film);">

    tbody = document.getElementById(tbody);

    Zur Vollständigkeit gehört noch eine Abfrage dahinter, ob das Element auch gefunden wurde
    also z.B.

    if (tbody) {  
       // Deine Schleife  
    }
    

    oder umgekehrt:

    if (!tbody) {  
      //evtl Hinweis  
      return;  
    }  
    // Deine Schleife
    

    Leider scheint die Übergabe nicht richtig zu funktionieren, da
    ich nur folgende Ausgabe habe:

    Nö, weil der Funktionsvariablen Inhalt ein String übergeben wurde, wie du es beheben kannst siehe oben. Und dann berichte uns den nächsten Fehler, damit der auch behoben werden kann ;)

    Die Wahl der Variablennamen tbody tr und td ist auch nicht ganz glücklich.

    Außerdem hättest du das Thema im alten Thread belassen sollen.


    Kai

    --
    What is the difference between Scientology and Microsoft? One is an
    evil cult bent on world domination and the other was begun by L. Ron
    Hubbard.
    ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|