Alexander: Überprüfung von Options-Feldern mit Javascript

Hallo!
Hab in meinem Formular einige Textfelder in Javascript auf Eingabe oder leer überprüft. Jetzt habe ich noch ein Optionsfeld. Wenn ich das Script hier genau so anwende wie beim Text, geht es nicht?!
So sieht der Code für das Script aus, hab alles genau so gemacht wie bei Textfeldern, wo es ja funktioniert.
"Anrede" ist der Name des(der) Optionsfeldes

<script language="JavaScript">
  <!--
   function chkFormular()
  {
   if(document.Formular.Anrede.value == "")
    {
     alert("Bitte Anrede auswählen!");
     document.Formular.Anrede.focus();
     return false;
    }
     }
  //-->
 </script>
Geht das denn bei optiensfeldern anders?

Gruß
Alex

  1. Grüssi!

    Geht das denn bei optiensfeldern anders?

    Ja, nachzulesen in Selfhtml:
    http://www.teamone.de/selfhtml/tecbbdaa.htm

    lg bernhard

    1. Hi Bernhard!

      Danke, sowas hatte ich gesucht, aber nicht gefunden, wie kommt man dahin, denn es interessieren mich noch ein paar mehr Sachen in die Richtung. Also auf Javascript, und dann? Bei Objekten habe ich sowas nicht gefunden, ist ja auch eigentlich nicht ganz richtig, oder?
      Gruß
      Alex

      1. Grüssi Alex,

        Danke, sowas hatte ich gesucht, aber nicht gefunden, wie kommt man dahin, denn es interessieren mich noch ein paar mehr Sachen in die Richtung. Also auf Javascript, und dann? Bei Objekten habe ich sowas nicht gefunden, ist ja auch eigentlich nicht ganz richtig, oder?

        Unter Javascript -> Objektreferenz, da stehen die wichtigsten Objekte und die darauf anwendbaren Methoden/Handler beschrieben.

        Wenn ich was aus Javascript suche, beginne ich immer da, wenn ich da auch nix finde schaue ich im Inhaltsverzeichnis nach, in der Auslese oder den Featureartikel, und wenn das alles nix nützt, dann bemühe ich die Suche ;-)

        http://developer.netscape.com/docs/manuals/js/client/jsguide/index.htm ist auch immer ein guter Link!

        lg bernhard

        1. ********
           *DANKE!*
           ********

        2. Hallo!

          Hab mir das alles durchgesucht und probiert, aber das was ich wollte habe ich leider noch nicht gefunden:-(
          Was dem am nächsten kam war folgendes Skript, welches jedes Feld einzelnd prüft und dann je nachdem weiterleitet. Was ich will müßte viel einfacher gehen, den ich will lediglich wissen, ob überhaupt eines der Felder ausgewählt wurde.
          Der Code:

          <script language="JavaScript">
          function Weiter()
          {
           if(document.Testform.Art[0].checked == true)
            window.location.href="frminhalt.htm"
           else if(document.Testform.Art[1].checked == true)
            window.location.href="inhalt.htm"
           else
            alert("Bitte eine Auswahl treffen");
          }
          </script>

          auch folgendes mit select sah ganz gut aus, aber auch hier wird immer nach einem bestimmten Feld geguckt, nich einfach ob überhaupt etwas da steht:

          <html><head><title>Test</title>
          <script language="JavaScript">
          function CheckAuswahl()
          {
           if(document.Testform.Auswahl.options[2].selected == true)
           {
            alert("Diese Auswahl gilt nicht");
            return false;
           }
           return true;
          }
          </script>
          </head><body>
          <form name="Testform" onSubmit="return CheckAuswahl()">
          <select name="Auswahl" size=5>
          <option>Goethe
          <option>Schiller
          <option>Guildo Horn
          <option>Homer
          <option>Fontane
          </select>
          <br>
          <input type=submit>
          </form>
          </body></html>

          Wenn keines ausgewählt wurde, soll halt ein alert Befehl ausgegeben werden, sonst normal abgeschickt werden.

          Wie könnte ich das wohl machen???

          Gruß
          Alex

          Grüssi Alex,

          Danke, sowas hatte ich gesucht, aber nicht gefunden, wie kommt man dahin, denn es interessieren mich noch ein paar mehr Sachen in die Richtung. Also auf Javascript, und dann? Bei Objekten habe ich sowas nicht gefunden, ist ja auch eigentlich nicht ganz richtig, oder?

          Unter Javascript -> Objektreferenz, da stehen die wichtigsten Objekte und die darauf anwendbaren Methoden/Handler beschrieben.

          Wenn ich was aus Javascript suche, beginne ich immer da, wenn ich da auch nix finde schaue ich im Inhaltsverzeichnis nach, in der Auslese oder den Featureartikel, und wenn das alles nix nützt, dann bemühe ich die Suche ;-)

          http://developer.netscape.com/docs/manuals/js/client/jsguide/index.htm ist auch immer ein guter Link!

          lg bernhard

          1. Grüssi!

            <script language="JavaScript">
            function Weiter()
            {
            if(document.Testform.Art[0].checked == true)
              window.location.href="frminhalt.htm"
            else if(document.Testform.Art[1].checked == true)
              window.location.href="inhalt.htm"
            else
              alert("Bitte eine Auswahl treffen");
            }
            </script>

            Du kannst die Chekcboxes/Radio-Buttons ja auch mit einer forschleife abfragen:
            for (i=0; i< document.Testform.Art.length; i++) {
              if(document.Testform.Art[i].checked) {... bla bla bla ... }
            }

            auch folgendes mit select sah ganz gut aus, aber auch hier wird immer nach einem bestimmten Feld geguckt, nich einfach ob überhaupt etwas da steht:

            Hast du auch die Sache mit SelectedIndex gelesen?

            function CheckAuswahl() {
              if(!document.Testform.Auswahl.selectedIndex) {
                alert("Bitte auswählen");
                return false;
              }
              return true;
            }

            Je nachdem was du brauchst, musst du dir diese Codeschnipsel eben anpassen, aber von der Grundidee sollte es doch klar sein wie es geht. Die Syntax zum Abfragen steht in besagtem Link.

            <form name="Testform" onSubmit="return CheckAuswahl()">
            <select name="Auswahl" size=5>
            <option>Goethe
            <option>Schiller
            <option>Guildo Horn
            <option>Homer
            <option>Fontane
            </select>

            lg bernhard

            1. Hallo!

              Hast du auch die Sache mit SelectedIndex gelesen?

              Ja sicher, hab ich, hatte das nur so verstanden, als wär das ne Funktion mit der man einen bestimmten Wert auswählt und dafür einen anderen speichert.

              function CheckAuswahl() {
                if(!document.Testform.Auswahl.selectedIndex) {
                  alert("Bitte auswählen");
                  return false;
                }
                return true;
              }

              ich hatte gedacht inter selectindex miüßte nochj sowas wie == 2 oder so stehen?!
              Ist das ! vor docoment Absicht?

              Das doofe war nur das sich das selectindex auf eine Auswahl bezieht, nicht auf options Felder.

              Gruß
              Alex

              Je nachdem was du brauchst, musst du dir diese Codeschnipsel eben anpassen, aber von der Grundidee sollte es doch klar sein wie es geht. Die Syntax zum Abfragen steht in besagtem Link.

              <form name="Testform" onSubmit="return CheckAuswahl()">
              <select name="Auswahl" size=5>
              <option>Goethe
              <option>Schiller
              <option>Guildo Horn
              <option>Homer
              <option>Fontane
              </select>

              lg bernhard

              1. Hallo!
                Ich will ja nicht nerven, aber eigentlich kann ich nicht nachvolziehen, warum das bei den options-Feldern anders sein soll als bei Textfeldern!
                Ich hatte ja folgendes vereinfachtes Skript probiert:

                <html><head><title>Test</title>
                <script language="JavaScript">
                  <!--
                   function chkFormular()
                  {
                   if(document.Formular.text.value == "")
                    {
                     alert("Bitte Ihren Namen angeben!");
                          return false;
                    }
                     }
                  //-->
                 </script>
                </head><body>
                <form name="Formular" method="post" action="/cgi-bin/form4.cgi" onSubmit="return chkFormular()">
                  <input type="radio" name="Auswahl" value="radiobutton2">
                  <input type="radio" name="Auswahl" value="radiobutton1">
                  <input type="submit" value="Abschicken">
                  <input type="text" name="text">
                </form>
                </body></html>

                Funktioniert wunderbar, nur wenn ich für
                if(document.Formular.text.value == "")

                if(document.Formular.Auswahl.value == "")
                kann man einfach weiter klicken ohne dass die Fehlermeldung kommt.
                Aber "Auswahl" ist doch genau so eine Variable wie "text", oder? Wenn keine Option ausgewählt ist, hat die Variable "Auswahl" doch keinen Wert, also value == "", oder???
                Warum geht das dann nicht so?
                Gruß
                Alex
                PS: Deine anderen Versionen probiere ich auch gerade, noch läuft es nicht!

                1. Grüssi nochmal

                  Ich will ja nicht nerven, aber eigentlich kann ich nicht nachvolziehen, warum das bei den options-Feldern anders sein soll als bei Textfeldern!

                  Les' dir bitte den JS-Teil in Selfhtml durch! Du hast 2 gleichnamige Radiobuttons, die kannst du nicht einfach mit value abfragen, welcher denn nun geklickt wurde! Du musst erst jeden fragen ob er geklickt wurde, und dann kannst du mit value seinen Wert holen!

                  function chkFormular()
                    {
                     if(document.Formular.text.value == "")
                      {
                       alert("Bitte Ihren Namen angeben!");
                            return false;
                      }

                  <form name="Formular" method="post" action="/cgi-bin/form4.cgi" onSubmit="return chkFormular()">
                    <input type="radio" name="Auswahl" value="radiobutton2">
                    <input type="radio" name="Auswahl" value="radiobutton1">
                    <input type="submit" value="Abschicken">
                    <input type="text" name="text">
                  </form>
                  </body></html>

                  if(document.Formular.Auswahl.value == "")
                  kann man einfach weiter klicken ohne dass die Fehlermeldung kommt.
                  Aber "Auswahl" ist doch genau so eine Variable wie "text", oder?

                  Nein !!! Auswahl ist ein Feld, und keine "normale" (skalare) Variable. Ein Feld enthält mehrere solcher Variablen. In diesem Fall zwei, nämlich den value des ersten radiobuttons und als zweites den value des zweiten Radiobuttons:

                  document.Formular.Auswahl[0].value == "radiobutton1"
                  document.Formular.Auswahl[1].value == "radiobutton2"

                  Ich kann dich an dieser Stelle nur nochmals darauf hinweisen, doch bitte in Selfhtml zuerst mal die Grundlagen einer "Programmiersprache" dir anzueignen!

                  Ändere dein Formular-script mal folgendermassen ab:

                  function chkFormular() {
                       alert(document.Formular.Auswahl.value);
                      }

                  1. lass dir mal den Wert ausgeben - sollte Beweis genug sein ;-)
                  2. Ersetze 'Auswahl' durch 'Auswahl[0]' und schau den Wert an.
                  3. Ersetze 'Auswahl' durch 'Auswahl[1]' und schau den Wert an.

                  dann siehst du hoffentlich warum du vorher abfragen musst welcher Radiobutton denn nun "checked" wurde, denn aus einer Gruppe gleichnamiger Radiobuttons kann immer nur einer checked sein! Den musst du erst finden!

                  Wenn keine Option ausgewählt ist, hat die Variable "Auswahl" doch keinen Wert, also value == "", oder???

                  Auswahl.value (alleine) hat _nie_ einen definierten werten, solange es mehr als einen Radiobutton mit diesem Namen gibt.

                  Warum geht das dann nicht so?

                  s.o.

                  Wenn du dir das nächstemal diese Frage stellst, dann erinnere dich an dieses Script. Lass dir den Wert eines Formularfeld einfach mit alert ausgeben, so kannst du genau sehen wo die Fehler liegen.

                  lg bernhard

                  1. Danke! Werde ich alles tun und dich jetzt nicht mehr nerven:)

                    1. Grüssi,

                      Danke! Werde ich alles tun und dich jetzt nicht mehr nerven:)

                      Du hast nicht genervt, nur ein bissl zu wenig in Selfhtml nachgelesen ;-) Wenn du noch Fragen hast frag ruhig, aber nutzte das immense Wissen, das die diese Dokumentation (gratis!!!) zur Verfügung stellt.

                      lg bernhard

              2. Grüssi

                Hast du auch die Sache mit SelectedIndex gelesen?

                Ja sicher, hab ich, hatte das nur so verstanden, als wär das ne Funktion mit der man einen bestimmten Wert auswählt und dafür einen anderen speichert.

                Hää? SelectedIndex ist eine Eigenschaft des option-Objektes. Es hat als Wert entweder den Index der ausgewählten Option (die die blau unterlegt ist) oder undefined, wenn nichts ausgewählt wurde

                function CheckAuswahl() {
                  if(!document.Testform.Auswahl.selectedIndex) {
                    alert("Bitte auswählen");
                    return false;
                  }
                  return true;
                }

                ich hatte gedacht inter selectindex miüßte nochj sowas wie == 2 oder so stehen?!
                Ist das ! vor docoment Absicht?

                oh oh oh, ich glaube du fängst besser ganz vorn beim Javascript Kapitel an ;-)

                Stimmt, man kann den Wert auch spezifisch abfragen: Wenn du z.b. wissen willst ob die 3te(!) Option ausgewählt wurde, dann macht man das so wie du eben vorgeschlagen hast. Wenn es egal ist welche, hauptsache irgendwas ausgewählt, dann reicht es wenn SelectedIndex nicht false ist

                Das Rufzeichen vor einem Ausdruck verneint diesen. Ich werde jetzt nicht anfangen zu erklären was ein Ausdruck ist, das musst du nun wirklich mal selbst studieren!

                Wann ist ein Ausdruck falsch (false)? Wenn er entweder undefined oder 0 liefert!
                Wann ist ein Ausdruck wahr (true)? Wenn er eine Zahl ungleich 0 liefert!

                Wenn man in einer if-Bedingung also abfragen will ob eine Variable einen Wert hat, also nicht undefined oder 0 ist, dann kann man das einfach so tun: if(variable) {...} Wenn variable == 0, dann wird der if-block nicht ausgeführt sondern in einen ev. vorhandenen else-Block verzweigt. Wenn die Variable jetzt wie in unserem Fall grösser 0 ist, wird der if-Block allerdings ausgeführt.

                Wenn du genau das gegenteil willst, also dass der if-Block nur ausgeführt wird, wenn die Variable _keinen_ Wert hat (=false), dann setzt du eben das Verneinungssymbol ! (sprich: "not") davor.

                http://www.teamone.de/selfhtml/teb.htm

                lg bernhard

                1. Hi Bernhard!
                  Danke für die ausführliche Antwort!
                  Du hast Recht, mit Javascript kenn ich mich auch noch nocht besonders aus. Aber eigentlich brauche ich das kaum, ich hab ein paar Skripte, mit denen ich bis jetzt immer gut klar gekommen bin und jetzt brauche ich was rel. spezielles, das geht dann halt nicht mehr ganz so einfach.
                  Aber ich hab nochwas gepostet in dem ich geschrieben hab, dass ich nicht verstehe, dass ich nicht einfach prüfen kann, ob value == "", das wär kein Problem, aber das geht wohl nicht wie bei Textfeldern, obwohl es auch nur eine andere Variable ist.
                  Aber ich versuche mal und lese, lese......
                  Gruß
                  Alex