ausgefülltes Formular ruft Folgeformular auf
ingvild
- javascript
Hallo,
mithilfe von Javascriptexperten hier im Forum bin ich schon soweit gekommen, dass beim Ausfüllen von Formularfragen das nächste Formular mit Folgefragen aufgerufen wird. Nun genügt das leider nicht den Anforderungen, sondern das Folgeformular soll erst aufgerufen werden, wenn alle Fragen des ersten Formulars ausgefüllt wurden.
Welcher Javascriptexperte erbarmt sich nochmals und hilft mir als Einsteiger, indem er mir das Coding zeigt oder erklärt? Funktioniert das mit einem Eventhandler?
Hallo, Ingvild
Ich vermute mal, dass du die Daten aus dem ersten Formular noch irgendwo speichern möchtest, vermutlich hast du das auch scon im <form>-tag unter action="irgendwas" getan.
Dann kannst du die Eingaben clientseitig mit Javascript prüfen UND musst sie aber auf jeden Fall auch serverseitig prüfen, denn nicht jeder Benutzer hat Javascript an.
zuerst clientseitig:
das form-tag kennt den Eventhandler onSubmit.
<form name="myForm" action="tuwasmitdenDaten.php" method="POST oder GET" onSubmit="return validiereDaten()">
dann brauchst du noch die Javascript-Funktion, die die Daten überprüft
(wie man die einzelnen elemente anspricht findest du bei Selfhtml unter dem Stichwort elements)
validiereDaten() {
for (i=0;i<document.myForm.elements.length;i++) {
if (document.myForm.elements[i].value=="") {
alert (document.myForm.elements[i].name+" ist leer");
return false; }
}
return true;
}
diese Überprüfung kannst du nach gusto verfeinern, jetzt testet sie nur darauf, ob ein Element = "" (also leer) ist.
Serverseitige Prüfung hängt von den möglichen Sprachen ab die du einsetzen kannst (PHP, Perl etc).
Dieses Skript übernimmt dann auch die Weiterleitung zur Seite mit dem Folgeformular.
PS. Falls es immernoch aktuell ist, dass eine Checkbox auf die nächste Seite führen soll (das war doch das Ausgangsproblem oder?), kannst du das mit onClick="document.MyForm.submit();" im <input>-Tag lösen.
der Fuzzi.
Hallo lieber Javascriptfuzzi,
das muss ich mir jetzt erst mal zur Gemüte führen.
Nochmals danke, kann mich ja programmässig nicht so revanchieren, aber falls Du im Raum HD wohnen würdest, könnte ich Dich mal bei uns in der Firma zu einem guten Essen einladen.
Da laufen zwar auch jede Menge Javascriptfuzzis und höhere Gattungen rum, aber die haben für sowas keine Zeit.
Hallo lieber Javascriptfuzzi,
das muss ich mir jetzt erst mal zur Gemüte führen.
Nochmals danke, kann mich ja programmässig nicht so revanchieren, aber falls Du im Raum HD wohnen würdest, könnte ich Dich mal bei uns in der Firma zu einem guten Essen einladen.
Da laufen zwar auch jede Menge Javascriptfuzzis und höhere Gattungen rum, aber die haben für sowas keine Zeit.
Hallo Vimes,
ojeh, ich glaube, da sind noch zu viele Unwägbarkeiten für mich drin:
<script language="JavaScript" type="text/javascript">
<!--
validiereDaten () {
for (i=0;i<document.survey.htm.elements.length;i ++) {
if (document.survey.htm.elements [i].checked == true) {
alert (document.survey.elements [i].submit (buttonname?) + "checked");
return false; }
return true;
}
//-->
</script>
survey.htm wäre das erste Formular. Bleibt "elements" stehen für
die Formularelemente oder müssen die benannt werden?
Ich habe "checked" für "ausgefüllt" eingesetzt.
Das Ganze muss ja dann mit dem submit button des ersten Formulars verknöddelt werden, oder?
Uuund wo ist dann der Aufruf für das zweite Formular (survey1.htm)?
Die php-Geschichte habe ich wohl verstanden, aber bei der Programmierei stehe ich noch im Nebel.
Hallo,
ohjeh, da ist einiges zu reparieren.
<script language="JavaScript" type="text/javascript">
<!--
validiereDaten () {
for (i=0;i<document.survey.htm.elements.length;i ++) {
if (document.survey.htm.elements [i].checked == true) {
alert (document.survey.elements [i].submit (buttonname?) + "checked");
return false; }
return true;
}
//-->
</script>
Wie heisst dein Formular - das was bei <form name="Name"> als Name steht? survey.htm klingt für mich nach der Seite- also dem HTML-Dokument. Vermute mal, dass ein Punkt im Namen des Forms nicht zulässig ist und einige Browser da ganz schön ins schlingern kommen.
gehe im folgenden davon aus, dss dein Formular wie folgt def. ist:
<form name="survey" onSubmit="return validiereDaten()" .... >
survey.htm wäre das erste Formular. Bleibt "elements" stehen für
die Formularelemente oder müssen die benannt werden?
elements steht tatsächlich für die elemente des Forms. Das kann man aber mit Selfhtml auch selbst rausfinden ;-|)
Ich habe "checked" für "ausgefüllt" eingesetzt.
hat dein erstes Formular nur Radiobuttons bzw. Checkboxes ?
oder musst du auch Eingabezeilen abtesten? - dann elements[i].value überprüfen.
alert (document.survey.elements [i].submit (buttonname?) + "checked");
Was soll das machen? Elemente kennen kein Submit.
Das Ganze muss ja dann mit dem submit button des ersten Formulars verknöddelt werden, oder?
genau, über bspw soetwas
<input type="checkbox" name="Bla" onClick="document.survey.submit">
Uuund wo ist dann der Aufruf für das zweite Formular (survey1.htm)?
Der sollte dann in dem Script erfolgen, das die Daten bearbeitet (also serverseitig). In PHP bspweise mit header("Location: irgendwohin.htm");
viel Erfolg
Sorry, klar, es muss "survey" heissen, das war ein Schreibfehler.
Das Formular hat auch Kommentarfelder (das hatte ich vergessen).
Die alert-Zeile verstehe ich noch nicht ... :-(
(Den Rest dafür schon (Verknüpfung mit submit-Button und serverseitiges Auslesen).
Hier also nochmals:
<script language="JavaScript" type="text/javascript">
<!--
validiereDaten () {
for (i=0;i<document.survey.elements.length;i ++) {
if (document.survey.elements [i].value = "ja") {
alert (document.survey.elements [i].name + "value");
return false; }
return true;
}
//-->
</script>
Im Formular survey.htm beim submit-Button:
<input type="submit" value="Umfrage abschicken" onClick="document.survey.submit">
Moin,
Hier also nochmals:
<script language="JavaScript" type="text/javascript">
<!--
validiereDaten () {
for (i=0;i<document.survey.elements.length;i ++) {
if (document.survey.elements [i].value = "ja") {
1. diese Bedingung ist immer wahr! Test auf Gleichheit in Javascript nur mit == .
2. Auch mit == wird dein Formular nur dann abgeschickt, wenn ALLE Elemente den wert "ja" haben. Das ist zumindest für den Submit-Button zu bezweifeln.
3. Wenn du auch noch andere Felder hast, ist eine generelle Überprüfung mittels For-Schleife vielleicht nicht zielführend.
Entscheidend ist, welche Felder gefüllt sein müssen. Sind das nur wenige, machst du das am besten für jedes einzeln.
für Eingabezeilen (<input type="text" name="bla"...> so:
if (document.survey.bla.value=="") return false;
^ Name der Eingabezeile
für Radiobuttons
if (!document.survey.bla.checked) return false;
^ Name des Radiobuttons
etc pp.
alert (document.survey.elements [i].name + "value");
desn Alert hatte ich nur eingesetzt, damit dir die Funktion sagt, bei welchem Formularelement der Fehler auftritt.
Im Formular survey.htm beim submit-Button:
<input type="submit" value="Umfrage abschicken" onClick="document.survey.submit">
Dass onClick kannst du dir sparen, da ein Submit-Button per Definition das Formular abschickt.
Das Konstrukt war nur dafür da, dass du mittels einer Checkbox oder Radiobuttons das Formular auch abschicken kannst.
Besser wird es wohl sein du postest hier mal den ganzen HTML-Code mit einer Wunschliste, was du machen willst und dann sehen wir mal weiter. (oder per mail)
Scheint ja doch mit Javascript nicht so weit her zu sein ;-)