Capirinha: Abfrage ob Radiobutton checked

Hallo zusammen

Ich hab ein kleines Problem. Ich brauche auf einer Seite eine Abfrage ob  einer von meinen Radiobuttons ausgewählt wurde oder nicht.

Form
--------------------------

<form method="post" name="form100015" enctype="multipart/form-data" action="/index.php?TPL=10086">

<input type="radio" name="x220_formfields[190]" value="1" checked  />
Frage 1

<input type="radio" name="x220_formfields[190]" value="2" checked  />
Frage 2

<input type="radio" name="x220_formfields[190]" value="3" checked  />
Frage 3

</form>

Aufruf
---------------------------

<div onclick="checked_checker()">Weiter</div>

Java Script
---------------------------

function checked_checker() {

if(document.form100015.x220_formfields[190].checked) {
   return true;
 }
 else {
   alert("Bitte machen Sie eine Angabe!");
   return false;
 }

}

Ich kriege die Fehlermeldung: "document.form100015.x220_formfields has no properties"

Nach meinem Verständis ist der Grund der, dass die Radiobuttons den gleichen Namen haben. Würde ich sie umbenennen in verschiedene Namen würde es funktionieren...?

Das ganze läuft aber auf einem CMS und die Namen der Radiobuttons können nicht verändert werden. Kann ich das JS so anpassen, dass er diese Überprüfung hinkriegt?

Im gleichen Form hat es übrigens noch weitere Radiobuttons. Je ein paar 3er Sets. Jedes Set hat einen Namen wie:

x220_formfields[190]

x220_formfields[191]

....

Ein Tipp wäre toll :)

  1. Ich kriege die Fehlermeldung: "document.form100015.x220_formfields has no properties"

    Nach meinem Verständis ist der Grund der, dass die Radiobuttons den gleichen Namen haben. Würde ich sie umbenennen in verschiedene Namen würde es funktionieren...?

    Nein, deine Felder haben eben nicht den gleichen Namen, schau dir mal den Abschnitt Gruppenelemente an. Wenn sie den gleichen Namen hätten, könntest du über den Index auf sie zugreifen, aber auch dann ist eine Prüfung ob das Element vorhanden ist nciht verkehrt.

    Struppi.

    1. Ich kriege die Fehlermeldung: "document.form100015.x220_formfields has no properties"

      Nach meinem Verständis ist der Grund der, dass die Radiobuttons den gleichen Namen haben. Würde ich sie umbenennen in verschiedene Namen würde es funktionieren...?

      Nein, deine Felder haben eben nicht den gleichen Namen, schau dir mal den Abschnitt Gruppenelemente an. Wenn sie den gleichen Namen hätten, könntest du über den Index auf sie zugreifen, aber auch dann ist eine Prüfung ob das Element vorhanden ist nciht verkehrt.

      Struppi.

      Erstmal danke für die Antwort :)

      Ich dachte auch mal daran hab dann den Aufruf so abgeändert dass er so aussieht:

      if(document.form100015.x220_formfields[190][0].checked) {
         return true;
       }

      und dann noch eines für [1] und [2]...

      Gab genau die gleiche Fehlermeldung aus. Auch x220_formfields[0] funktioniert nicht...

      1. hi,

        bitte zitiere vernünftig, nicht einfach alles.

        Ich dachte auch mal daran hab dann den Aufruf so abgeändert dass er so aussieht:

        if(document.form100015.x220_formfields[190][0].checked) {

        Hast du Formularfelder, deren Name "x220_formfields" lautet?

        http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo

          Ja habe ich, es sind je 3er Sets Radiobuttons, sehen folgendermassen aus:

          Frage 1:
          <input type="radio" name="x220_formfields[190]" value="1" checked  />
          Antwort 1
          <input type="radio" name="x220_formfields[190]" value="2" checked  />
          Antwort 2
          <input type="radio" name="x220_formfields[190]" value="3" checked  />
          Antwort 3

          Frage 2:
          <input type="radio" name="x220_formfields[191]" value="1" checked  />
          Antwort 1
          <input type="radio" name="x220_formfields[191]" value="2" checked  />
          Antwort 2
          <input type="radio" name="x220_formfields[191]" value="3" checked  />
          Antwort 3

          1. hi,

            Ja habe ich,

            Lüg' doch nicht :-)

            es sind je 3er Sets Radiobuttons, sehen folgendermassen aus:

            Frage 1:
            <input type="radio" name="x220_formfields[190]" value="1" checked  />
            ...
            Frage 2:
            <input type="radio" name="x220_formfields[191]" value="1" checked  />
            Antwort 1
            ...

            Nein, ein Input-Element mit dem Namen x220_formfields ist an keiner dieser Stellen zu sehen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Nein, ein Input-Element mit dem Namen x220_formfields ist an keiner dieser Stellen zu sehen.

              Aehm, okay meiner Meinung nach ist ein Input Element mit diesem Namen zu sehen. Bzw. ein Arrayelement.

              Und falls nicht irre ich mich halt. Eigentlich schreibe ich hier nach bestem Wissen und Gewissen und ersuche um Hilfe.

              Willst du mir helfen oder mir mitteilen dass ich keine Ahnung habe? Bei letzterem bitte ich dich nicht weiter zu antworten.

              1. Nein, ein Input-Element mit dem Namen x220_formfields ist an keiner dieser Stellen zu sehen.

                Aehm, okay meiner Meinung nach ist ein Input Element mit diesem Namen zu sehen. Bzw. ein Arrayelement.

                Deine Meinung, aber es stimmt nicht. Die Elemente heißen so wie es im name Attribut steht, also nicht "x220_formfields" sondern "x220_formfields[190]", dass ist eine etwas unglücklcihe PHP Spezialität und hat die von dir beobachtete negative Auswirkung, das man in JS nicht mher normal auf die Elemente zugreifen kann.

                Struppi.

                1. Deine Meinung, aber es stimmt nicht. Die Elemente heißen so wie es im name Attribut steht, also nicht "x220_formfields" sondern "x220_formfields[190]"

                  Danke, das erklärt einiges. Aber müsste nicht genau deshalb der Aufruf

                  if(document.form100015.x220_formfields[190][0].checked) {
                     return true;
                  }

                  eigentlich korrekt sein? Das wäre dann der Name des Elements: x220_formfields[190] plus die Stelle an der das Element steht [0] für die erste Stelle.

                  Laut Objektreferenz würde das zumindest für mich Sinn machen. Ich zitiere:

                  "Hinter dem Elementnamen notieren Sie dann in eckigen Klammern die Indexnummer des gewünschten Elements."

                  Es funktioniert auf jedenfall nicht.

                  1. Hallo Capirinha!

                    if(document.form100015.x220_formfields[190][0].checked) {
                       return true;
                    }
                    funktioniert auf jedenfall nicht

                    Weil JavaScript die Zahl im ersten Klammerpaar bereits als Nummer interpretiert (und nicht als Teil des Elementnamen) und die Zweite Zahl im zweiten Klammerpaar vermutlich ignoriert.

                    Viele Grüße aus Frankfurt/Main,
                    Patrick

                    --

                    _ - jenseits vom delirium - _
                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                    Nichts ist unmöglich? Doch!
                    Heute schon gegökt?
                    1. Hallo Capirinha!

                      if(document.form100015.x220_formfields[190][0].checked) {
                         return true;
                      }
                      funktioniert auf jedenfall nicht

                      Weil JavaScript die Zahl im ersten Klammerpaar bereits als Nummer interpretiert (und nicht als Teil des Elementnamen) und die Zweite Zahl im zweiten Klammerpaar vermutlich ignoriert.

                      schon der erste Indexoperator wird ignoriert, weil kein einziges Element mit dem Namen "x220_formfields" existiert, das haben wir jetzt aber schon zum x Mal hier im Thread.

                      Um mit dem obigen Zugriff ein Ergebniss zu erhalten müsste man sowas definieren:

                      with(document.form100015) {  
                      x220_formfields = new Array();  
                      x220_formfields[190] = new Array();  
                      form100015.x220_formfields[190][0] = new Object();  
                      form100015.x220_formfields[190][0].checked = true;  
                      }
                      

                      Struppi.

                      1. kleine Korrektur:

                        with(document.form100015) {

                        x220_formfields = new Array();
                        x220_formfields[190] = new Array();
                        x220_formfields[190][0] = new Object();
                        x220_formfields[190][0].checked = true;
                        }

                          
                        Struppi.
                        
                        1. Okay, jetzt hat es "klick" gemacht.

                          Patrick und Struppi, herzlichen Dank für die Hilfe!

                          Ich werd jetzt mal ein wenig basteln und sehen was ich tun kann... Am einfachsten wäre es in dem Fall sicher die Namensgebung der Radiobuttons zu ändern. Das geht aber eher weniger weil der CMS Code nicht überall offen ist.

                          Ich versuchs mal damit:

                          with(document.form100015) {
                           x220_formfields = new Array();
                           x220_formfields[190] = new Array();
                           x220_formfields[190][0] = new Object();
                           x220_formfields[190][0].checked = true;
                          }

                          1. Okay, jetzt hat es "klick" gemacht.

                            ich befürchte leider immer noch nicht.

                            Ich werd jetzt mal ein wenig basteln und sehen was ich tun kann... Am einfachsten wäre es in dem Fall sicher die Namensgebung der Radiobuttons zu ändern.

                            nein, du kannst problemlos auf deine Elemente zugreifen, du musst nur den richtigen von dir verwendenten Namen angeben.

                            Ich versuchs mal damit:

                            with(document.form100015) {
                            x220_formfields = new Array();
                            x220_formfields[190] = new Array();
                            x220_formfields[190][0] = new Object();
                            x220_formfields[190][0].checked = true;
                            }

                            Das ist Blödsinn, dass Beispiel sollte nur zeigen was du versuchst und warum es Blödsinn ist.

                            Struppi.

                            1. Grml...well, Das Problem hab ich zumindest verstanden denk ich.

                              Ich brauch den richtigen Namen um zuzugreifen. Aber da das von PHP generierte Array in JS nicht als Array sondern als Teil des Namens angesehen wird funktioniert es nicht. Correcto?

                              Wenn ich die Namensgebung anpassen würde, also zb. statt:
                              -> x220_formfields[190]
                              -> x220_formfields_190 verwenden würde, gäbs ja keine Probleme weil ich im JS einfach:

                              if(document.form100015.x220_formfields_190[0].checked)

                              schreiben könnte. Was ich jetzt "dachte" ist dass ein Aufruf für einen Namen wie x220_formfields[190] im Normalfall immer fehlschlägt, ausser ich erstelle direkt in JS ein Objekt mit Attributen wie ich es möchte und weise dem über Umwege Inhalte zu....das wäre dann der Blödsinn.

                              Okay, was mir helfen würde ist in dem Fall das WIE kann ich auf mein x220_formfields[190] Array in JS zugreifen?

                              1. Okay, was mir helfen würde ist in dem Fall das WIE kann ich auf mein x220_formfields[190] Array in JS zugreifen?

                                Nochmal, es ist kein Array es ist der Name und du kannst auf den Namen mit den ungültigen Zeichen nach der auf selfhtml als Schema 4 bezeichneten Art und Weise zugreifen.

                                Struppi.

                                1. Nochmal, es ist kein Array es ist der Name und du kannst auf den Namen mit den ungültigen Zeichen nach der auf selfhtml als Schema 4 bezeichneten Art und Weise zugreifen.

                                  Yeah, Merci! Jetzt hat's geklappt. Genau den Fingerzeig hab ich gesucht.

                                  if(document.forms["form100015"].elements["x220_formfields[190]"][0].checked==false){
                                     alert("empty");
                                     return true;
                                  }

                                  Oder

                                  if(document.forms['form100015'].elements[0].checked==false){
                                     alert("empty");
                                     return true;
                                  }

                                  Sind Aufrufe die funktionieren.

                                  Dankeschön!

                                  1. hi,

                                    Nochmal, es ist kein Array es ist der Name und du kannst auf den Namen mit den ungültigen Zeichen nach der auf selfhtml als Schema 4 bezeichneten Art und Weise zugreifen.

                                    Yeah, Merci! Jetzt hat's geklappt. Genau den Fingerzeig hab ich gesucht.

                                    Nächstes mal also besser mal aufmerksam lesen, anstatt zu meckern.

                                    gruß,
                                    wahsaga

                                    --
                                    /voodoo.css:
                                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                      2. Hallo Struppi!

                        Weil JavaScript die Zahl im ersten Klammerpaar bereits als Nummer interpretiert (und nicht als Teil des Elementnamen) und die Zweite Zahl im zweiten Klammerpaar vermutlich ignoriert.

                        schon der erste Indexoperator wird ignoriert, weil kein einziges Element mit dem Namen "x220_formfields" existiert, das haben wir jetzt aber schon zum x Mal hier im Thread.

                        Ja, das hatte ich verstanden. Mit meiner Antwort wollte ich drauf hinweisen, dass eine Namensgebung für Elemente, wie sie Capinriha einsetzt, zum Scheitern verurteilt wird - aus den Gründen die genannt wurden.

                        Hat er/sie gleich zu Anfang gesagt:

                        Ich kriege die Fehlermeldung: "document.form100015.x220_formfields has no properties"

                        Im Grunde hast Du hier: " D.h. du willst hier auf das 191 Element des Arrays "x220_formfields" (das es nicht gibt)" das Gleiche gesagt wie ich (nur besser *g*).

                        Viele Grüße aus Frankfurt/Main,
                        Patrick

                        --

                        _ - jenseits vom delirium - _
                        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                        Nichts ist unmöglich? Doch!
                        Heute schon gegökt?
                        1. Ja, das hatte ich verstanden. Mit meiner Antwort wollte ich drauf hinweisen, dass eine Namensgebung für Elemente, wie sie Capinriha einsetzt, zum Scheitern verurteilt wird - aus den Gründen die genannt wurden.

                          Nein ist sie nicht, er muss nur den richtigen Namen verwenden.

                          Struppi.

                  2. Deine Meinung, aber es stimmt nicht. Die Elemente heißen so wie es im name Attribut steht, also nicht "x220_formfields" sondern "x220_formfields[190]"

                    Danke, das erklärt einiges. Aber müsste nicht genau deshalb der Aufruf

                    if(document.form100015.x220_formfields[190][0].checked) {
                       return true;
                    }

                    eigentlich korrekt sein? Das wäre dann der Name des Elements: x220_formfields[190] plus die Stelle an der das Element steht [0] für die erste Stelle.

                    Nein er ist nicht korrekt, der Indexoperator ist in JS ein Indexoperator und nicht teil einer Zeichenkette. D.h. du willst hier auf das 191 Element des Arrays "x220_formfields" (das es nicht gibt) zugreifen und diese Element soll dann ein Array sein, dessen erstes Element du zugreifs

                    Laut Objektreferenz würde das zumindest für mich Sinn machen. Ich zitiere:

                    "Hinter dem Elementnamen notieren Sie dann in eckigen Klammern die Indexnummer des gewünschten Elements."

                    Ja das stimmt auch so 100%

                    Es funktioniert auf jedenfall nicht.

                    Natürlich nicht.

                    Struppi.

              2. hi,

                Aehm, okay meiner Meinung nach ist ein Input Element mit diesem Namen zu sehen. Bzw. ein Arrayelement.

                Und falls nicht irre ich mich halt.

                Und deshalb weise ich dich ja darauf hin, dass du dich irrst.

                Willst du mir helfen oder mir mitteilen dass ich keine Ahnung habe?

                Ich wollte dir mitteilen, dass du falsch liegst.
                Ausserdem habe ich dir noch einen Link genannt, wo du dich über alternative Zugriffsmöglichkeiten informieren kannst - wenn dir das allerdings zu viel eigene Denkarbeit erfordert, die du nicht zu leisten bereit bist -

                Bei letzterem bitte ich dich nicht weiter zu antworten.

                • dann schlage ich dir gleichsam vor, hier nicht mehr zu fragen.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }