Michelle: Formularvalidierung - "Wenn ja - zusätzlich Felder validieren"

Hallo

Ich habe ein Formular für eine Kundenumfrage mit Textareas, Radios und Checkboxen, welche als Mussfelder markiert sind.
Bei einer Frage solle via Radio ja/nein gewählt werden.
Bis hierhin kann ich alles problemlos validieren.

Bei der ja/nein-Frage sollen im Falle von ja, noch weitere Felder zu Mussfeldern werden. Bei nein muss nichts weiter ausgefüllt werden.

Und das krieg ich nun nicht hin - Google hat mr bisher auch nicht weitergeholfen.

<input name="labor" type="radio" value="ja" /> Ja - bitte nachfolgende Fragen beantworten<br />
<input name="labor" type="radio" value="nein" /> Nein - nachfolgendes einfach leer lassen<br />

if (document.form.labor && checkRadioEinzeln(document.form.labor)==false) {
alert("Bitte waehlen Sie aus, ob Sie spaeter an Tests mitmachen moechten.");
return false;
}

danach folgen dann eben noch paar Fragen mit Radios, Checkboxen und Text, die im Ja-Fall zu Mussfeldern werden sollen.

Bitte einfach antworten - bin ein Greenhorn in Sachen JS ;-)

Danke und viele Grüsse,
Michelle

  1. Mahlzeit Michelle,

    prinzipieller Hinweis: eine *verlässliche* Validierung von Benutzereingaben kann *NUR* und *AUSSCHLIEßLICH* auf dem Server erfolgen - jegliche Client-seitige Validierung (z.B. mittels Javascript) kann durch den Benutzer ausgehebelt bzw. manipuliert werden. Berücksichtige das!

    if (document.form.labor && checkRadioEinzeln(document.form.labor)==false) {

    Was genau tut die Funktion checkRadioEinzeln()?

    alert("Bitte waehlen Sie aus, ob Sie spaeter an Tests mitmachen moechten.");

    Du könntest die "Validierung" der zusätzlichen Felder in eine eigene Funktion auslagern und diese einfach hier aufrufen, wenn der Benutzer "Ja" ausgewählt hat.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi

      Danke für deine Antwort.

      if (document.form.labor && checkRadioEinzeln(document.form.labor)==false) {

      Was genau tut die Funktion checkRadioEinzeln()?

      Sie schaut ob aus der Radiogruppe eines ausgewählt ist

      Sorry, das gehört noch dazu...

      function checkRadioEinzeln(name) {
      var radiogroup = name; // Variable aus Aufruf definiert den Namen der Gruppe
      var itemchecked = false;
      for(var j = 0 ; j < radiogroup.length ; ++j) {
      if(radiogroup[j].checked) {
      itemchecked = true;
      break;
      }
      }
      return itemchecked;
      }

      Du könntest die "Validierung" der zusätzlichen Felder in eine eigene Funktion auslagern und diese einfach hier aufrufen, wenn der Benutzer "Ja" ausgewählt hat.

      Klingt gut :-) nur wie rufe ich das auf? sobald der Radio "ja" gewählt ist? Oder beim Absenden? Sorry HTML Top - JS Flop ;-)

      function validate() für die vorherigen Felder wird in der Action aufgerufen.
      Könnte das ganze nochmals unter neuem neuen Namen anlegen mit den neuen Feldern. Aber wo/wie muss der function-Befehl im Formular plaziert werden?

      Danke und Gruss,
      Michelle

      1. Mahlzeit Michelle,

        Du könntest die "Validierung" der zusätzlichen Felder in eine eigene Funktion auslagern und diese einfach hier aufrufen, wenn der Benutzer "Ja" ausgewählt hat.

        Klingt gut :-) nur wie rufe ich das auf?

        <http://de.selfhtml.org/javascript/sprache/funktionen.htm#aufrufen@title=Wie man eine Funktion aufruft> ... <http://de.selfhtml.org/javascript/sprache/funktionen.htm#definieren@title=nachdem man sie definiert hat>.

        sobald der Radio "ja" gewählt ist? Oder beim Absenden?

        Wann findet die bisherige generelle "Validierung" statt? Genau *dort* sollte die spezielle "Validierung" für die "optionalen" Formularelemente aufgerufen werden - wenn der Radiobutton "Ja" gewählt wurde, richtig.

        Sorry HTML Top - JS Flop ;-)

        Das kann (und sollte) man/frau ändern ... ;-)

        function validate() für die vorherigen Felder wird in der Action aufgerufen.

        "In der Action"? Wie meinst Du das? <http://de.selfhtml.org/html/referenz/attribute.htm#form@title=Im "action"-Attribut eines Formulars> hat lediglich ein URI etwas zu suchen.

        Könnte das ganze nochmals unter neuem neuen Namen anlegen mit den neuen Feldern.

        Ähm ... hä?

        Vielleicht solltest Du ein lauffähiges Online-Beispiel oder aber vollständigen Quellcode liefern, um das Verständnis unter Deinen Lesern zu erhöhen.

        Aber wo/wie muss der function-Befehl im Formular plaziert werden?

        Im Formular: nirgendwo. Eigne Dir mindestens einige Grundlagen von Javascript an (z.B. wie man Funktionen definiert und aufruft - siehe oben).

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo EKKi

          Danke fürs Feedback. Ich habe ne Umgehungslösung gefunden; getreu dem Motto:

          Sorry HTML Top - JS Flop ;-)

          Das kann (und sollte) man/frau ändern ... ;-)

          Der Versuch das Programmier-Gen zu aktivieren ist bereits mehrmals gescheitert ;-) Jedem Spezialist sein Gebiet.

          Danke und Liebe Grüsse,
          Michelle

    2. prinzipieller Hinweis: eine *verlässliche* Validierung von Benutzereingaben kann *NUR* und *AUSSCHLIEßLICH* auf dem Server erfolgen - jegliche Client-seitige Validierung (z.B. mittels Javascript) kann durch den Benutzer ausgehebelt bzw. manipuliert werden. Berücksichtige das!

      Aber die lokale Validierung erspart zumindest das unnötige Absenden von Requests und beschleunigt den Vorgang bzw. spart Traffic (was besonders für Mobilgeräte interessant ist).

      Das Erzeugen der JavaScript-Validierungsroutine sollte aber ebenfalls am Server passieren - sprich dieselben Funktionen die die eigentliche serverseitig Prüfung vornehmen, erzeugen auch das JavaScript. Damit wird sichergestellt, dass die Prüfregeln nicht auseinanderlaufen.

      1. Mahlzeit suit,

        Aber die lokale Validierung erspart zumindest das unnötige Absenden von Requests und beschleunigt den Vorgang bzw. spart Traffic (was besonders für Mobilgeräte interessant ist).

        Das ist richtig. Außerdem ist es für den Benutzer natürlich komfortabel, wenn er sofort eine Rückmeldung bekommt ... trotz alledem ist eine Client-seitige Validierung allenfalls als optional, *NIEMALS* jedoch als ausreichend anzusehen. Auf eine Server-seitige Validierung sollte man *KEINESFALLS* verzichten!

        Das Erzeugen der JavaScript-Validierungsroutine sollte aber ebenfalls am Server passieren - sprich dieselben Funktionen die die eigentliche serverseitig Prüfung vornehmen, erzeugen auch das JavaScript. Damit wird sichergestellt, dass die Prüfregeln nicht auseinanderlaufen.

        ... solange sie nicht von findigen Benutzern manipuliert werden. Und natürlich unter der Prämisse, dass Javascript im Browser überhaupt aktiviert ist ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|