Werte in Formularfeldern bleiben nicht erhalten
G. Keule
- javascript
Hallo zusammen!
Wenn ich mit Javascript einen neuen Wert in ein HTML-Formular eintragen lasse, steht nach Beendigung des Skripts sofort wieder der alte Wert drin.
Wie bekommt man's hin, dass der neue Wert erhalten bleibt?
Gruß GK
Hier ist ein Beispiel:
Zuerst steht "Alt" im Textfeld. Wenn man auf den Knopf "Aus Alt mach Neu!" klickt, startet das Skript, welches "Neu" ins Textfeld einträgt. Sobald man die Alert-Meldung "Und jetzt wird Neu wieder Alt :-(" mit Ok quittiert und damit das Skript beendet, steht wieder "Alt" im Textfeld.
<html>
<head>
<title>Formulartest</title>
<script language="JavaScript">
<!--
function formtest()
{
document.myForm.myText.value="Neu";
alert("Und jetzt wird Neu wieder Alt :-(")
}
//-->
</script>
</head>
<body>
<h2>Formulartest</h2>
<form name="myForm">
<input type="text" name="myText" size="10" value="Alt">
<input type="submit" value="Aus Alt mach Neu!" onClick="formtest()">
</form>
</body>
</html>
Hi,
Wie bekommt man's hin, dass der neue Wert erhalten bleibt?
Du lässt das Formular abschicken, welches - mangels des *zwingend benötigten* action-Attributs - in Deinem Browser an die selbe URI geschickt wird. Sprich: Du lädst die Seite neu. Verhindere dies.
<html>
DOCTYPE fehlt. Die Seite befindet sich im Quirks-Mode.
<script language="JavaScript">
Das zwingend benötigte type-Attribut fehlt.
<h2>Formulartest</h2>
Gut. Eine oft gegebene Empfehlung lautet, ein <h2> nur dann einzusetzen, wenn es auch ein <h1> gibt. (Weiter mit vollständiger Induktion.)
<input type="text" name="myText" size="10" value="Alt">
Eine weitere Empfehlung lautet, XHTML statt HTML zu schreiben.
Cheatah
Hallo nochmal?
Wie bekommt man's hin, dass der neue Wert erhalten bleibt?
Du lässt das Formular abschicken, welches - mangels des *zwingend benötigten* action-Attributs - in Deinem Browser an die selbe URI geschickt wird. Sprich: Du lädst die Seite neu. Verhindere dies.
Wie verhindere ich das?
Oder: Wohin soll ich das Formular mit dem Action-Attribut
schicken, damit das nicht passiert?
<html>
DOCTYPE fehlt. Die Seite befindet sich im Quirks-Mode.
<script language="JavaScript">
Das zwingend benötigte type-Attribut fehlt.
...
Ok ok, aber als kleines Beispiel funktioniert es trotzdem.
Gruß - GK
Hi
Wie verhindere ich das?
return false;
mfg
Genie
Hi
Wie verhindere ich das?
return false;
Danke.
Ich habe diese Zeile ins Skript eingebaut, aber das hilft nicht.
Hi
Danke.
Ich habe diese Zeile ins Skript eingebaut, aber das hilft nicht.
Warum machst du aus dem Absende-Button nicht einfach nen normalen?
<input type="submit" value="Aus Alt mach Neu!" onClick="formtest()">
<input type="button" value="Aus Alt mach Neu!" onClick="formtest()">
absenden kannst du ja dann noch mit document.forms[0].submit()
Dann kannst du dir das return false; auch sparen
mfg
Genie
Hi
Danke.
Ich habe diese Zeile ins Skript eingebaut, aber das hilft nicht.
Warum machst du aus dem Absende-Button nicht einfach nen normalen?
<input type="submit" value="Aus Alt mach Neu!" onClick="formtest()">
<input type="button" value="Aus Alt mach Neu!" onClick="formtest()">
Vielen Dank! type="button" hat das Problem gelöst!
absenden kannst du ja dann noch mit document.forms[0].submit()
Dann kannst du dir das return false; auch sparen
Ich möchte nur etwas berechnen, und brauche bazu die Formularfelder, um Werte eingeben zu können. Abschicken möchte ich nix.
Hi
Vielen Dank! type="button" hat das Problem gelöst!
Nix zu danken :-)
Ich möchte nur etwas berechnen, und brauche bazu die Formularfelder, um Werte eingeben zu können. Abschicken möchte ich nix.
Ich hab gesagt, du *kannst*, wenn es erforderlich ist.
mfg
Genie
Hallihallo!
Ich hab gesagt, du *kannst*, wenn es erforderlich ist.
Dann wäre man aber zum Abschicken des Formulars auf Javascript angewiesen, was eher suboptimal ist.
Auch wenn das eigentliche Problem schon gelöst ist, trotzdem ein alternativer Hinweis, v.A. fürs Archiv:
Es ginge auch mit einem <input type="submit" onclick="return formtest()">
, oder noch besser mit:
<form name="..." action="..." onsubmit="return formtest();">
,
verbunden mit einem return false;
am Ende der Javascript- Funktion.
Durch das "doppelte" return wird bewirkt, daß das Abschicken des Formulars auch tatsächlich verhindert wird.
Wie gesagt, ich weiß, daß sich das Problem bereits anders lösen liess, aber es wird im Archiv so oft nach einer Lösung für Formularvalidierung per Javascript gesucht, daß ich das einfach loswerden musste.[1] Ausserdem hat diese Lösung den Vorteil, dass das Formular auch mit der Enter- Taste abgeschickt werden kann.
Viele liebe Grüße,
Der Dicki
[1] Noch was fürs Archiv: Auf Javascriptvalidierte Formulardaten kann man sich nicht verlassen, weil .... sie wissen schon ;)