Hannes: document.write in NS und MSIE

Hallo liebe Forumsteilnehmer,

mein Problem: ich will über ein Formular eine Verarbeitung in Gang setzen, die mir im gleichen Fenster zur erneuten Ausgabe des Formulars mit ansonsten geändertem Fensterinhalt führt. Hierzu die HTML-Datei:

<html><head><title>Test</title>
<script language=javascript src=ausgabe.js></script>
</head><body>

<form name="Formular" onSubmit="ausgabe()">
gib was ein:     <input type=text size=40 name="benutzereingabe">
Formular: <input type=submit value="Los gehts"><input type=reset value="Loeschen">
</form>
</body></html>

und das zugehörige Skript in der Datei "ausgabe.js":

function ausgabe()
{
document.writeln("<html><head><title>Test</title>");
document.writeln("<script language=javascript src=ausgabe.js></script>");
document.writeln("</head><body>");
document.writeln("<em>Neues Formular</em>");
document.writeln("<form name=Formular onSubmit='ausgabe()'>");
document.writeln("gib was ein:<input type=text size=40 name='benutzereingabe'>");
document.writeln("Formular: <input type=submit value='Los'><input type=reset value='Loeschen'>");
document.writeln("</pre></form>");
document.writeln("</body></html>");
}

Im Ablauf ergeben sich zwei Probleme:

a) Im Navigator funktioniert das Abschicken des ersten Formular, das neue Formular baut sich auf (ist aber bei "Ansicht: Quelltext" nicht zu sehen, dort steht noch das erste Formular), ein erneutes Abschicken führt dann zur Auflistung des aktuellen Ordnerinhaltes.

b) Im Internet Explorer führt das Abschicken des ersten Formulars nur zu einem kurzen Aufblitzen des neuen Formulars, dann wird wieder das erste Formular geladen.

Hat jemand von euch eine Idee, wie ich das gelöst bekomme?

Danke, Hannes

  1. Hi,
    hast Du es schonmal mit open() und close() versucht?

    document.open("text/html", "replace")
    document.writeln("<html><head><title>Test</title>");
    [...]
    document.writeln("</body></html>");
    document.close()

    Mathias

  2. Hi Hannes,

    zwei Sachen fallen mir ein:

    1. Wo steht denn die Funktion? Wenn sie im Head stehen sollte, wird über document.write AFAIK dort hin geschrieben,also in den Head --> Verwirrung --> plötzlich ein Body bevor </head> kommt

    2. Ein JS-Interpreter betrachtet ein Script als beendet, wo ein / vorkommt. In Deinem Fall also z.B. hier:

    document.writeln("<html><head><title>Test</title>");

    ^
    Hast Du das Glück, dass der Browser darüber hinweggeht, müsste es aber spätestens hier zu Ende sein:

    document.writeln("...</script>");

    ^^^^^^^^^

    Vorschlag: sämtliche Slashes müssen durh Backslashes maskiert werden, also z.B.

    document.writeln("...</script>");

    Grüße,

    Utz

  3. Hallo,

    okay: Maskierung und open bzw.close, das hat für Netscape gereicht. Aber der IE verweigert noch die korrekte Verarbeitung. Dabei arbeitet IE das Skript komplett ab (hab ich getestet) und zeigt kurz das vom Skript erzeugte Fenster an. Dann aber geht er flott wieder auf das ursprüngliche Fenster. Wenn ich dann mit dem back-button zu dem kurz angezeigten Fenster zurück gehe: fehlerfrei ausgegeben! Die Quelltext-Anzeige beinhaltet aber Seltsames ...

    Noch immer ratlos, dabei wollte ich das bevorstehende Wochenende eigentlich mit was anderem verbringen ...

    Gruß: Hannes

    PS:
    Der Vollständigkeit halber die fragliche Datei:

    <html><head><title>Test</title>
    <script language=javascript src=ausgabe.js></script>
    </head><body>

    <form name="Formular" onSubmit="ausgabe()">
    gib was ein:     <input type=text size=40 name="benutzereingabe">
    Formular: <input type=submit value="Los gehts"><input type=reset value="Loeschen">
    </form>
    </body></html>

    und das Script aus der Datei "ausgabe.js":
    function ausgabe()
    {
    document.open("text/html", "replace()");
    document.writeln("<html><head><title>Test</title>");
    document.writeln("<script language=javascript src=ausgabe.js></script>");
    document.writeln("</head><body>");
    document.writeln("<em>Neues Formular</em>");
    document.writeln("<form name=Formular onSubmit='ausgabe()'>");
    document.writeln("gib was ein:<input type=text size=40 name='benutzereingabe'>");
    document.writeln("Formular: <input type=submit value='Los'><input type=reset value='Loeschen'>");
    document.writeln("</pre></form>");
    document.writeln("</body></html>");
    document.close();
    }