Enrico: Letztmalige Unterstützung notwendig bei Fehlermeldung

Hallo,

jetzt muß ich euch (hoffentlich) nur noch einmal mit meiner DVD-Verwaltung bemühen und um Hilfe
bei einem Problem bitten, das ich absolut nicht verstehe.

Zunächst die Reihenfolge meiner Funktionsaufrufe:

1. Definition global gültiger Variablen:

var Filme = new Array ();
   var Seite = new Array ();

2. Aufruf der Funktion zum Einlesen der Filmdaten:

function Datenbank_aufbauen ()
   {
      Ladehinweis_anzeigen ("Initialisierung");

var Rohdaten = document.getElementById ("Rohdaten");
          Rohdaten = Rohdaten.contentWindow.document.body.innerHTML;
          Rohdaten = Rohdaten.replace(/<[^>]*>/i, "");

var Einzelne_Filme = Rohdaten.split ("\n");
      Anzahl_Filme_insgesamt = Einzelne_Filme.length;

for (var i = 0; i < Anzahl_Filme_insgesamt; i++)
      {
         var Spalte = Einzelne_Filme[i].split ("|");

Filme[i] = new Array ();
         Filme[i]["Nr"]     = Spalte [0];
         Filme[i]["Titel"]  = Spalte [1];
         Filme[i]["Inhalt"] = Spalte [2];
         Filme[i]["Genre"]  = Spalte [3];
         Filme[i]["FSK"]    = Spalte [4];
      }

Filme_gruppieren ();
   }

3. Gruppierung der eingelesenen Filme in Seiten zu je 30 Einträgen bzw. mit den verbleibenden
   Filmen bei der letzten Seite:

function Filme_gruppieren ()
   {
      var Zaehler = 0;
      var Seitenzahl = 0;
      Seite [0]      = new Array ();

for (var i = 0; i < Anzahl_Filme_insgesamt; i++)
      {
         if (Zaehler == 30)
         {
            Seitenzahl += 1;
            Seite [Seitenzahl] = new Array ();
            Zaehler = 0;
         }

Seite [Seitenzahl].push (Filme [i]);
         Zaehler += 1;
      }

Anzahl_Seiten = Seite.length - 1;

Buchstabenindex_aufbauen (0);
   }

4. Aufbau des Buchstabenindex zum Filtern der Filme nach dem gewünschten Anfangsbuchstaben bzw.
   einer Zahl des Filmtitels:

function Buchstabenindex_aufbauen (Flag)
   {
      if (Flag == 0)
      {
         for (var i = 0; i < Anzahl_Filme_insgesamt; i++)
         {
            var Anfangsbuchstabe = Filme[i]["Titel"].substring(0,1);

if (is_numeric (Anfangsbuchstabe))
            {
               Anfangsbuchstabe = "#";
            }

if (! Temp.in_array (Anfangsbuchstabe))
            {
               Temp.push (Anfangsbuchstabe);
            }
         }

Temp.sort (Buchstabenindex_sortieren);
      }

if (Flag == 1)
      {
         var Liste_Buchstabenindex = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Initialisieren (); this.blur();"><span>Alle Filme anzeigen</span></a>';
      }

if (Flag == 0)
      {
         var Liste_Buchstabenindex = "";

for (var i = 0; i < Temp.length; i++)
         {
            Liste_Buchstabenindex += '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Tabelle_filtern ('' + Temp[i] + ''); this.blur();"><span>' + Temp[i] + '</span></a>';
         }
      }

var Buchstabenindex = document.getElementById ("Buchstabenindex");
          Buchstabenindex.innerHTML = Liste_Buchstabenindex;

Seite_anzeigen (0);
   }

5. Ausgabe (hier, da die DVD-Verwaltung "frisch" aufgerufen wurde) der ersten Seite:

function Seite_anzeigen (Seitennummer)
   {
      var Ausgabe = "";

for (var i = 0; i < Seite[Seitennummer].length; i++)
      {
         Ausgabe += '<table>';
         Ausgabe += '<tr>';
         Ausgabe += '<td class="Abstand_rechts" rowspan="5" valign="top"><img src="COVER/' + Seite[Seitennummer][i].Titel + '.png"></td>';
         Ausgabe += '<td>Titel:</td>';
         Ausgabe += '<td>' + Seite[Seitennummer][i].Titel + '</td>';
         Ausgabe += '</tr>';
         Ausgabe += '<tr>';
         Ausgabe += '<td class="Abstand_rechts" nowrap>DVD-Nr.:</td>';
         Ausgabe += '<td>' + Seite[Seitennummer][i].Nr + '</td>';
         Ausgabe += '</tr>';
         Ausgabe += '<tr>';
         Ausgabe += '<td>Genre:</td>';
         Ausgabe += '<td>' + Seite[Seitennummer][i].Genre + '</td>';
         Ausgabe += '</tr>';
         Ausgabe += '<tr>';
         Ausgabe += '<td>FSK:</td>';
         Ausgabe += '<td>' + Seite[Seitennummer][i].FSK + '</td>';
         Ausgabe += '</tr>';
         Ausgabe += '<tr>';
         Ausgabe += '<td>Inhalt:</td>';
         Ausgabe += '<td width="100%">' + Seite[Seitennummer][i].Inhalt + '</td>';
         Ausgabe += '</tr>';
         Ausgabe += '</table>';

if (i < Seite[Seitennummer].length - 1)
         {
            Ausgabe += '<br><br>';
         }
      }

var Tabellenausgabe = document.getElementById ("Tabellenausgabe");
          Tabellenausgabe.innerHTML = Ausgabe;

var Hoehe_div = document.defaultView.getComputedStyle(Tabellenausgabe, "").getPropertyValue("height");
          Hoehe_div = Hoehe_div.split('px');
          Hoehe_div = Hoehe_div[0];

var Hoehe_Seite = Tabellenausgabe.scrollHeight;

if (Hoehe_Seite > Hoehe_div)
      {
         Tabellenausgabe.className = "Tabellenausgabe_zusaetzlicher_Abstand";
      }

if (Initialisierung == true)
      {
         Initialisierung = false;
      }

Blaetterfunktion_aufbauen (Seitennummer);
   }

6. Aufbau der Blätterfunktion:

function Blaetterfunktion_aufbauen (Seite)
   {
      var Seitenlinks = "";

var Link_Erste_Seite;
      var Link_Vorherige_Seite;
      var Link_Naechste_Seite;
      var Link_Letzte_Seite;

if (Seite > 0)
      {
         if (Seite - 1 == 0)
         {
            Link_Erste_Seite     = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (0); this.blur();"><span>Erste Seite</span></a>';
            Link_Vorherige_Seite = '<span class="inaktiv"><span class="Rahmen_rechts">Vorherige Seite</span></span>';
         }
         else
         {
            Link_Erste_Seite     = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (0); this.blur();"><span>Erste Seite</span></a>';
            Link_Vorherige_Seite = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (' + (Seite - 1) + '); this.blur();"><span>Vorherige Seite</span></a>';
         }
      }
      else
      {
         Link_Erste_Seite     = '<span class="inaktiv"><span class="Rahmen_rechts">Erste Seite</span></span>';
         Link_Vorherige_Seite = '<span class="inaktiv"><span class="Rahmen_rechts">Vorherige Seite</span></span>';
      }

if (Seite < Anzahl_Seiten)
      {
         if (Seite + 1 == Anzahl_Seiten)
         {
            Link_Naechste_Seite = '<span class="inaktiv"><span class="Rahmen_rechts">Nächste Seite</span></span>';
            Link_Letzte_Seite   = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (' + Anzahl_Seiten + '); this.blur();"><span>Letzte Seite</span></a>';
         }
         else
         {
            Link_Naechste_Seite = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (' + (Seite + 1) + '); this.blur();"><span>Nächste Seite</span></a>';
            Link_Letzte_Seite   = '<a class="Schaltflaeche" href="javascript:void(0);" onclick="Seite_anzeigen (' + Anzahl_Seiten + '); this.blur();"><span>Letzte Seite</span></a>';
         }
      }
      else
      {
         Link_Naechste_Seite = '<span class="inaktiv"><span class="Rahmen_rechts">Nächste Seite</span></span>';
         Link_Letzte_Seite   = '<span class="inaktiv"><span class="Rahmen_rechts">Letzte Seite</span></span>';
      }

Seitenlinks = Link_Erste_Seite + Link_Vorherige_Seite + Link_Naechste_Seite + Link_Letzte_Seite;

var Blaetterfunktion = document.getElementById ("Blaetterfunktion");
          Blaetterfunktion.innerHTML = Seitenlinks;
   }

Hiermit ist die komplette Kette vom Einlesen der Filmdaten bis zur Anzeige der ersten Seite erledigt
und dies, also der erste Aufruf, klappt auch einwandfrei.

Wenn ich nun aber die Ansicht über den Buchstabenindex filtern möchte, bekomme ich in der Fehlerkonsole
von Firefox folgende Fehlermeldung:

Filme[i] is undefined

Zeile: 587

Dies ist folgende Zeile:

function Tabelle_filtern (Kriterium)
   {
      var Temp = new Array ();
      var Filme = new Array ();
      var Index = 0;

for (var i = 0; i < Anzahl_Filme_insgesamt; i++)
      {
    ---> Anfangsbuchstabe = Filme[i]["Titel"].substring(0,1); <---

...usw...
      }

...usw...
   }

Aber genau dieses Array habe ich doch, neben dem Array "Seite" ganz am Anfang global, also ausserhalb
jeglicher Funktionen definiert und auf das Array "Filme" wurde auch unmittelbar nach Aufruf meiner
DVD-Verwaltung immer wieder zugegriffen über folgende Funktionen:

Datenbank_aufbauen ()
   Filme_gruppieren ()
   Buchstabenindex_aufbauen ()

Warum klappt es beim ersten Aufruf und danach nicht mehr?

Desweiteren wird die Funktion zum Sortieren des Array "Filme" (ohne Fehlermeldung) komplett ignoriert,
die Sortierungen nehme ich einfach über "Filme.sort (Parameter)" vor.

Das Weiterblättern klappt, das Sortieren wird ignoriert und das Filtern mit einem Fehler quittiert.

Ich habe euch die Dateien noch einmal gezippt hochgeladen, so dass sie ihr euch anschauen könnt.

http://rapidshare.de/files/41215195/DVD-VERWALTUNG.zip.html

Ich hoffe sehr, dass ihr mir hier noch helft, dann ist endlich, endlich alles erledigt und auch
funktionstüchtig.

Vielen Dank und Gruß
Enrico

  1. Hiermit ist die komplette Kette vom Einlesen der Filmdaten bis zur Anzeige der ersten Seite erledigt
    und dies, also der erste Aufruf, klappt auch einwandfrei.
    Wenn ich nun aber die Ansicht über den Buchstabenindex filtern möchte, bekomme ich in der Fehlerkonsole
    von Firefox folgende Fehlermeldung:

    Filme[i] is undefined
       Zeile: 587

    Dies ist folgende Zeile:

    function Tabelle_filtern (Kriterium)
       {
          var Temp = new Array ();
          var Filme = new Array ();

    Hier initialisierst du im Functionscope eine neue Variable.
    Sie ist per se leer.

    var Index = 0;

    for (var i = 0; i < Anzahl_Filme_insgesamt; i++)
          {
        ---> Anfangsbuchstabe = Filme[i]["Titel"].substring(0,1); <---

    Hier greifst dzuu auf die leere Variable zu.
    Vollkommen klar, was der Fehler bedeutet.

    ...usw...
          }

    ...usw...
       }
    Aber genau dieses Array habe ich doch, neben dem Array "Seite" ganz am Anfang global, also ausserhalb
    jeglicher Funktionen definiert

    Das interessiert deine Schleofe nicht. Sie sieht die im Funktionscope initialisierte Variable gleichen Namens.

    mfg Beat;

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    1. Hallo,

      auch wenn ich die Deklaration "var Filme = new Array ();" weglasse,
      erhalte ich die Fehlermeldung, dass Filme[i] undefiniert ist.

      Gruß
      Enrico

      1. Hallo,

        Nach einer sehr langwierigen Suche habe ich das Problem mit der Fehlermeldung
        lösen können, das einzige, was ich noch nicht geschafft habe, ist, wie ich
        nach einer Sortierung den Blättermechanismus auf das neue Array anwende und
        nicht auf das komplette Array, das ich bei der Filterung ja eigentlich
        überschrieben und auf die Treffer gekürzt habe.

        Könnt ihr mir hier noch behilflich sein?

        Vielen Dank und Gruß
        Enrico