Form abschicken und zurücksetzen
Ruben
- javascript
Hallo,
ich nochmal...
zugegebenermaßen hab ich in der letzten Zeit kein Javascript benutzt und bin schon an vielen kleinen Hürden klebengeblieben, hab z.B. erst OR statt || geschrieben.
Bei dieser Hürde, auf die ich nun stieß, komme ich aber nicht weiter und finde auch in der Suche keine zu Ende diskutierte Lösung.
Die Situation ist wie folgt:
Ein Formular in einem Frame, verarbeitet wird es beim Senden in einem anderen, um den Arbeitsfluß zu gewährleisten.
Essentiell für den Arbeitsfluß ist aber, dass das Formular nach dem Absenden zurückgesetzt und aufs Anfangsfeld fokussiert wird.
Mein Script dazu sieht in seiner Essenz so aus:
<script type="text/javascript"><!--
function ingabe() {
if (/*blabla*/) {
return false;
}
else {
return true;
neu();
}
}
function neu() { document.eingabe.bekannt.value=document.eingabe.bekannt.defaultValue;
document.eingabe.fremd.value=document.eingabe.fremd.defaultValue; document.eingabe.hinweis.value=document.eingabe.hinweis.defaultValue;
document.eingabe.bekannt.focus();
}
//-->
</script>
<form id="eingabe" action="weitergabe.php" method="post" name="eingabe" target="hide" onsubmit="return ingabe();">
<!-- blla-->
</form>
Das ist alles. Kurioserweise klappt's ab und zu beim ersten Absenden, aber beim Zweiten nicht.
Ich hab mich noch nicht an einem Workaround versucht, weil ich eigentlich meine, dass JS dazu eine Lösung bereithalten sollte.
Wäre schon glücklich, wenn man mir erklärte, warum es keine Lösung gibt.
Achja: Kann mir jemand sagen, warum die Funktion, die nun den daemlichen Namen "ingabe()" trägt, im IE als "eingabe()" funktionierte, im Firefox aber nicht?
Vielen, vielen Dank,
Ruben
Hallo Ruben,
else {
return true;
Die Funktion returnt hier, damit ist Ende Gelände, du musst zuerst neu() ausfuehren, dann returnen
Gruß,
Dieter
Hej Dieter,
ja, soweit war ich auch schon, ich hab auch schon die von dir vorgeschlagene Stellung versucht, aber was dann passiert ist klar: die zurückgesetzten Werte sind gleich dem Default, was bedeutet, dass die Daten schlicht verloren gehen und DAS ist nicht im Sinne des Erfinders.
Danke,
Ruben
ja, soweit war ich auch schon, ich hab auch schon die von dir vorgeschlagene Stellung versucht, aber was dann passiert ist klar: die zurückgesetzten Werte sind gleich dem Default, was bedeutet, dass die Daten schlicht verloren gehen und DAS ist nicht im Sinne des Erfinders.
Dann musst du einfach einen Timeout setzen, der das Formular nach einer gewissen Zeit löscht, anders wird es wohl nicht gehen, mit ist kein aftersubmit Event bekannt.
Struppi.
<script type="text/javascript"><!--
function ingabe() {
if (/*blabla*/) {
return false;
}
else {
return true;
neu();
???
Dir ist klar was hier passiert?
}
}function neu() { document.eingabe.bekannt.value=document.eingabe.bekannt.defaultValue;
document.eingabe.fremd.value=document.eingabe.fremd.defaultValue; document.eingabe.hinweis.value=document.eingabe.hinweis.defaultValue;
document.eingabe.bekannt.focus();
Im Zweifel, gibt es auch die Funktion [Formular].reset();
Achja: Kann mir jemand sagen, warum die Funktion, die nun den daemlichen Namen "ingabe()" trägt, im IE als "eingabe()" funktionierte, im Firefox aber nicht?
Ich hätte es eher Umgekehrt vermutet, da der IE nicht sauber trennt ziwschen window. uind document. bzw. wenn dies nicht explizit angibst, sich das Objekt in einer der beiden sucht.
Aber warum FF das nicht macht, verrät dir wohl nur die JS Konsole.
Struppi.
Hallo Struppi,
ja, ich weiß, was dort passiert, wie ich Dieter schon schrieb, aber irgendeine nicht funktionierende Version musste ich ja wählen ^^ eine funktionierende, wäre sie mir denn über den Weg gelaufen, ist ja das, wonach ich immer noch suche.
Ja, ok, an das formularreset hab ich nicht gedacht, es erspart mir ein bisschen tippen, aber mein Problem ist so nicht gelöst.
Die Konsole im FF sagte nur dass die Funktion eingabe() nicht existiert. Als die Funktion dann ohne weitere Änderungen ingabe() hieß, er kannte FF sie plötzlich. Betone, IE hatte dieses Problem nicht, ich fang an, mich wieder mit dem anzufreunden, u.a. weil man da auch Buttons per tab erreicht.
Danke,
Ruben
ja, ich weiß, was dort passiert, wie ich Dieter schon schrieb, aber irgendeine nicht funktionierende Version musste ich ja wählen ^^ eine funktionierende, wäre sie mir denn über den Weg gelaufen, ist ja das, wonach ich immer noch suche.
Naja, das einzige Problem bei dem was du uns gezeigt hast, war dass du erst aus der Funktion rausspringst und dann noch was machen willst, das kann nciht gehen. Wenn es umgekehrt auch nciht geht, dann ist etwas anderes nicht i.O.
Die Konsole im FF sagte nur dass die Funktion eingabe() nicht existiert. Als die Funktion dann ohne weitere Änderungen ingabe() hieß, er kannte FF sie plötzlich. Betone, IE hatte dieses Problem nicht, ich fang an, mich wieder mit dem anzufreunden, u.a. weil man da auch Buttons per tab erreicht.
Wenn die Funktion eingabe() nicht existiert obwohl du sie deklariert hast, dann wirst du sie irgendwo überschrieben haben.
Dass der IE das Problem nicht hat seltsam und nicht nachvollziehbar. Ich kann ohne Probleme meine Funktionen eingabe nennen.
Im fiirefox erreicht man Buttons nicht per Tab? Ich hab grad keinen da, klingt aber auch seltsam.
Struppi.
Moin!
Ein Formular in einem Frame, verarbeitet wird es beim Senden in einem anderen, um den Arbeitsfluß zu gewährleisten.
Essentiell für den Arbeitsfluß ist aber, dass das Formular nach dem Absenden zurückgesetzt und aufs Anfangsfeld fokussiert wird.
Dann sollte deine Formularverarbeitungsseite onload per Javascript das absendende Formular zurücksetzen (Methode reset()) und den Fokus des Eingabefeldes setzen.
Denn erst wenn die Daten erfolgreich verarbeitet wurden, sollte man dem Benutzer seine eingegebenen Daten löschen, ansonsten würde er vielleicht etwas ungehalten reagieren.
Also etwas in der Form
top.formularfenster.document.formularname.reset();
top.formularfenster.document.formularname.feldname.focus();
- Sven Rautenberg
Hallo Struppi, Sven, Dieter und Schorsch!
Erstmal vielen Dank für die Hilfe, aber mein Problem (dessen zwei Brennpunkte sich nun eigentlich auf einen fokussieren, weswegen ich beim anderen Thema nicht mehr schreibe) bezieht sich schlicht auf den Arbeitsfluß.
Um mal meine Idee zu erklären: Es gibt ein PC-Programm namens Phase 6 zum Vokabellernen, dessen Umsetzung auf dem Macintosh bisher leider fehlt und das außerdem Geld kostet. Da es aber eigentlich nicht viel Technik ist, hab ich beschlossen, das System in der Onlineversion zu übernehmen.
Das Programm ist allerdings hart & kantig & schnell, wobei das Web mehr Buttons & langsam ist.
Zu diesem Zweck muss ich also ein bisschen am Web rummodeln, weswegen mir die Standardlösungen für die Probleme nicht so lieb sind. Mein höchstes Ziel soll da heißen: Effizienz. Da das Programm in der nächsten Zeit eh nicht gut genug sein wird, um öffentlich gemacht zu werden, will ich erstmal es für mich zum funktionieren kriegen.
Die Probleme, die das Button+langsam-web für mich bisher bereitstellte sind wie folgt:
Ich will die Vokabeleingeben, per Tab zum fremdes Wortfeld und per Tab zum Eingabebutton. Internetexplorer (an dessen Wiederbelebung ausschließlich als Vokabelprogramm ich grade denke) machts, Firefox will den Submittbutton nicht mit Tab ansprechen.
Dann: Die erste Vokabel geht auf die Reise. Es ist nur ein kleiner mysql_query von wahrscheinlich selten mehr als 1000 Zeichen. Diese Seite leitet im Moment (aus geschwindigkeitstechnischer Überlegung) auf eine txt mit dem Inhalt "x" weiter (damit keine Reloadgefahr besteht).
Ich tippe sehr schnell und eine kurze Vokabel hab ich à la Grippe->Flu-Enter schonmal sehr schnell im Kasten. Wenn der Server nun grade hakt (ist schon unangenehm genug), will ich nicht meinen letzten Datenbrief verlieren.
Ich habe schon darüber nachgedacht, das Ziel zwischen 2 Scripts wechseln zu lassen, aber vermutlich wäre die Datenbank darauf nicht gefasst, oder?
Nunja. Sven - deine Lösung ist zwar technisch die Beste und ich werde wohl oder übel darauf zurückgreifen, aber ich muss jedesmal eine komplette HTML-Datei laden (eine Verschlechterung im Gegensatz zu meinem "x" wie man sieht.)
Aber wenn man nach dem Submit ohne Timeout (das wäre doch unsicher, oder lieg ich da falsch?) kein Event erreichen kann, dann ist das wohl das beste.
Falls ich mich doch für das Timeout entscheide: Funktioniert denn die von mir im anderen Thread beschriebe top.framename.loading==true-Abfrage?
Hab grade schwedischen Highspeed und keine Lust große Dateien anzupeilen.
Vielen vielen Dank, vor allem, wenn ihr euch auch noch dieses Riesentextes erbarmt habt...
Ruben
Ich will die Vokabeleingeben, per Tab zum fremdes Wortfeld und per Tab zum Eingabebutton. Internetexplorer (an dessen Wiederbelebung ausschließlich als Vokabelprogramm ich grade denke) machts, Firefox will den Submittbutton nicht mit Tab ansprechen.
Bei mir tut er es (FF 1.0.6)
Dann: Die erste Vokabel geht auf die Reise. Es ist nur ein kleiner mysql_query von wahrscheinlich selten mehr als 1000 Zeichen. Diese Seite leitet im Moment (aus geschwindigkeitstechnischer Überlegung) auf eine txt mit dem Inhalt "x" weiter (damit keine Reloadgefahr besteht).
Ich tippe sehr schnell und eine kurze Vokabel hab ich à la Grippe->Flu-Enter schonmal sehr schnell im Kasten. Wenn der Server nun grade hakt (ist schon unangenehm genug), will ich nicht meinen letzten Datenbrief verlieren.
Hier frage ich mich, warum du nicht einfach ein normales Formular nimmst das im gleichen Fenster wieder ausgegeben wird?
Damit wären alle Probleme gelöst.
Wenn du einen schwereren Weg gehen willst, dann übergib die Daten im Hintergrund (z.b. onblur) per JS z.b. mit einem Image Objekt oder eleganter mit einem HTTPRequest.
Selbst wenn der Server hakt ist ja nichts verloren, jeder Request ist ein egenständiger Prozess, d.h. selbst wenn der 2. mal schneller fertig ist als der erste sind die Daten nicht verloren.
Ich habe schon darüber nachgedacht, das Ziel zwischen 2 Scripts wechseln zu lassen, aber vermutlich wäre die Datenbank darauf nicht gefasst, oder?
Der DB ist das egal. Du kannst ohne Probleme x Prozesse Gleichzeitig laufen lassen, die Tabellen werden gesperrt
http://dev.mysql.com/doc/mysql/de/table-locking.html
Struppi.
Bei mir tut er es (FF 1.0.6)
Mac. Naja, werd wohl ein Workaround dafür finden, z.B. submitlink.
Hier frage ich mich, warum du nicht einfach ein normales Formular nimmst das im gleichen Fenster wieder ausgegeben wird?
Damit wären alle Probleme gelöst.
Nein, das ist mir viel zu viel Ladezeit (Formular weg, Script an, Formular wieder an)...
Was ich eigentlich beabsichtige, ist auch dann tippen zu können, während die Daten übergeben werden. Ich werde das jetzt mit einem Submitlink (siehe FFprob) versuchen, da hab ich ja das "return true; bricht script ab"-problem nicht.
Wenn du einen schwereren Weg gehen willst, dann übergib die Daten im Hintergrund (z.b. onblur) per JS z.b. mit einem Image Objekt oder eleganter mit einem HTTPRequest.
Hab ich keine Ahnung, der Weg wäre mit Hürden gepflastert. onblur ist außerdem nicht im Sinne des Erfinders.
Selbst wenn der Server hakt ist ja nichts verloren, jeder Request ist ein egenständiger Prozess, d.h. selbst wenn der 2. mal schneller fertig ist als der erste sind die Daten nicht verloren.
Ich hab ehrlich gesagt, nicht viel Ahnung von dem Prinzipien MySQLs, aber ich werde mir die Page und einige andere nochmal genauer durchlesen. Ich bin ein großer Freund davon, (Code-)Dinge nur soweit zu verstehen, wie ich sie brauche.
vielen Dank für die Geduld und Hilfe,
Ruben