Habe gestern meine Homepage www.ivan-der-schreckliche.de ins Netz gestellt. Eine Funktion läuft dort nicht, obwohl sie auf meinem PC funktionierte (wenn auch mit Fehlermeldungen). Kann es so etwas geben?
Es geht um die Anzeige der aktuellen Seitenzahl auf der Seite „Texte“. Die JavaScript-Funktion liegt in der Datei „javascr/seite.js“. Wie sie funktioniert, ist im Dokument „Funktion.doc“ (gezippt) zu sehen, wo hoffentlich alles richtig dokumentiert ist.
Den größten Teil meiner Homepage (gezippt) und dieses Word-Dokument stelle ich unter dem Punkt „Download“ für „Rettungsversuche“ zu Verfügung.
Die gesamte Site beruht auf einem Frameset (linker Rand, Kopf, Menü, Inhalt, evtl. rechter Rand). Ein Klick auf den Button „Texte“ ruft im Inhalt-Frame ein zusätzliches Frameset („texte/frame_02.html“) auf, in das oben die graue Navigations-Box („texte/wahl.html“ mit Frame-Name „wahl“) und unten die aktuelle Seite geladen wird (zuerst: „texte/page_01.html“ mit Frame-Name „texte“).
Eines der Probleme scheint mir zu sein, wie das Textfeld mit der aktuellen Seitenzahl angesprochen werden muss, um gefüllt zu werden. Hier wurde für die Syntax „parent.wahl.document.formularname.textfeldname.value“ (bitte mit Syntax aus dem Quelltext vergleichen) oft eine Fehlermeldung ausgegeben, die allerdings keinen Einfluss auf die Funktion hatte.
in der HTML-Datei, die die Formulare definiert, bindest du das Script „seite.js“ im Header ein. Im Body folgen erst die Deklarationen der Formulare „balken“ und „seiten“.
Wenn die HTML-Seite geladen wird, dann wird von oben nach unten abgearbeitet. Folglich bearbeitet der Browser erst das Script, in dem aber steht:
Zu diesem Zeitpunkt existiert das Formular „seiten“ aber nicht und somit kann der Browser auch nicht den value in das Textfeld „aktuell“ einsetzten. Da das Laden der Seiten allgemein online wesentlich laenger dauert, als offline von der Platte, machen sich solche Fehler erst spaeter bemerkbar.
Des weiteren ist mir aufgefallen, dass Du eine Variable „seite“ verwendest und eine Funktion „seite()“, was wirklich ausgesprochen unschoen ist.Und beim erstmaligen Laden ist
var seite;
ueber
seite = parseInt(seite);
noch nicht definiert. Dies merkt man daran, all die weil parseInt() NaN (Not a Number) zurueckliefert.
Du musst Dein Skript erst dann zur Ausfuehrung bringen, wenn die HTML-Datei vollstaendig geladen ist, also z.B. ueber onload="…";
Problem gelöst, aber anders
Nach dem Problem ist vor dem Problem…(Der nächste Hammer hängt sicher schon bereit.)
Danke erst einmal für die tolle Antwort. Jetzt funktioniert es.
Ich bin nicht sicher, welcher der beiden Schritte die Lösung wirklich brachte:
Da es beim erstmaligen Aufruf des Framesets (wahl/texte) Laufzeitprobleme gibt, habe ich eine Abfrage der Variable „geladen“ eingebaut.
Die Variable „geladen“ befindet sich in einem Script-Bereich in wahl.html. Sie ist mit 0 vorbelegt und wird über die Funktion fertig() auf 1 gesetzt. Die Funktion fertig() wird durch onload in wahl.html aufgerufen. Der Wert 1 dokumentiert also die vollständige Anzeige der Datei wahl.html und aller ihrer Formularelemente.
Wenn die Variable „geladen“ den Wert 1 hat, dann findet die Anzeige im Textfeld statt. Wenn nicht, dann wird die Funktion seite() nach einer Sekunde erneut aufgerufen. Das passiert natürlich so oft, bis die Variable den Wert 1 hat.
Mit dieser Lösung ist die Funktionalität der Feldanzeige auch übersichtlicher. Ich hatte schon ein seltsames Gefühl dabei, die Funktion seite() von den Texdateien und auch gleichzeitig von wahl.html aufzurufen. Das wäre etwa so, als würde ich beim ersten Betreten eines Raumes zweimal den Lichtschalter einschalten müssen und erst bei jedem weiteren Betreten nur noch einmal.
Internetadresse, die auf dem Server ausgelesen wird, hat bereits einen Punkt hinter www, den es auf der Festplatte nicht gibt. Habe die Auslese auf „page“ umgestellt und den Stringausschnitt verändert.