Elmar: dynamische Anzahl von Radio-Buttons abfragen und reagieren

Hallo!

Ich habe eine Liste von Lieferzeitfenstern, die aus einer Datenbanktabelle generiert werden. Der User kann seine favorisierte Lieferzeit auswählen und seine Auswahl mit einem klick auf den Submit-Button bestätigen.

Der Form-Versand soll unterbunden werden, wenn kein Radio-Button abgeklickt wurde. Da sich die Abfrage eine varibalen Anzahl von Radio-Buttons für mich als etwas problematisch darstellte, habe ich ich mir mit einem hidden-Feld geholfen. Diese Lösung läuft auf allen Browsern (net 4.7,6.0, ie)... ausser Opera. Hat einer von Euch eine Idee, warum das so ist?

Hier mal der komplette relevante Code. Den BSP-Code habe ich nur mal drinn gelassen, um zu zeigen das hier geloopt wird. Die count-Variable enthält z.B. "000", "001", "002" etc. die zeitvariable enthält das Lieferfenster im, Format "18.00-22.00".

<script language="JavaScript">
    function clicked(feld, formular){
        feldwert= "checkclick"+feld;
        document.forms[formular].elements[feldwert].value="true";
    }

function Zeitfenstercheck(wert){
        order="order"+wert;
        check="checkclick"+wert;

if (!(navigator.userAgent.indexOf("Opera")!=-1)){
            if (window.document.forms[order].elements[check].value=="true"){
                return true;
            } else {
                alert("Bitte wählen Sie ein Zeitfenster!");
                return false;
            }
        }
    }
</script>

...
<form name="order<%=count%>" onSubmit="return Zeitfenstercheck('<%=count%>');">
...
<%loop at t_lzi into ls_lzi.
                write ls_lzi-lzeit_v to von using edit mask '__.__'.
                write ls_lzi-lzeit_b to bis using edit mask '__.__'.
                concatenate von '-' bis into zeitfenster.
                if ls_lzi-kbearest le 0. "hier gegen Auftragskap prüfen !!!!
                  concatenate zeitfenster '(belegt)' into zeitfenster separated by space.
                endif. %>
        <input type="radio" name="zeitfenster" value="<%=zeitfenster%>" onClick="clicked('<%=count%>', this.form.name);"> <%=zeitfenster%>
        <input type="hidden" name="checkclick<%=count%>" value="false"><br>
        <%endloop.%>
...

  1. Moin!

    Ich habe eine Liste von Lieferzeitfenstern, die aus einer Datenbanktabelle generiert werden. Der User kann seine favorisierte Lieferzeit auswählen und seine Auswahl mit einem klick auf den Submit-Button bestätigen.

    Der Form-Versand soll unterbunden werden, wenn kein Radio-Button abgeklickt wurde. Da sich die Abfrage eine varibalen Anzahl von Radio-Buttons für mich als etwas problematisch darstellte, habe ich ich mir mit einem hidden-Feld geholfen. Diese Lösung läuft auf allen Browsern (net 4.7,6.0, ie)... ausser Opera. Hat einer von Euch eine Idee, warum das so ist?

    Jeder Radiobutton desselben Namens wird in einem Javascript-Array gespeichert. Jeder Radiobutton hat außerdem die Eigenschaft "checked", welche true ist, wenn er gewählt wurde. Warum gehst du nicht mit einer FOR-Schleife alle Radiobuttons durch und schaust, ob irgendeiner true ist? Ist doch viel einfacher und funktioniert sogar. :)

    http://selfhtml.teamone.de/javascript/objekte/elements.htm#allgemeines angucken, vor allem etwas weiter unten den Punkt "Gruppenelemente". Das dort angegebene Beispiel demonstriert, wie man den zweiten Radiobutton ansprechen kann. Mit einer Variablen kann man alle Radiobuttons ansprechen, und mit dem Wissen, daß in document.FORMNAME.BUTTONNAME.length die Anzahl der Radiobuttons steckt, kriegt man auch die FOR-Schleife begrenzt.

    - Sven Rautenberg

    1. document.FORMNAME.BUTTONNAME.length

      Das war der Zaunpfahl, den ich einfach nicht gesehen habe. Dank fürs winken! Das mit dem Array war mir bekannt.

      Schöne Grüße,
      Elmar