rap123: Radiobutton-Funktion mit Checkboxen simulieren

Hallo,

ich habe zwei Spalten mit einer beliebigen Anzahl von Checkboxen:

<tr>  
	<td><input name="true" value=",1a"  type="checkbox"></td>  
	<td><input name="false" value=",1b" type="checkbox"></td>  
</tr>  
<tr>  
	<td><input name="true" value=",2a" type="checkbox"><br></td>  
	<td><input name="false" value=",2b" type="checkbox"><br></td>  
</tr>  
<!--...-->  

Vorab möchte ich sagen, dass ich mein Problem nicht mit Radiobuttons lösen will, da in jeder Spalte mehrere Auswahlen möglich sind von meiner verwendeten Programmiersprache automatisch in ein Array eingelesen werden können bzw sollen.

Die linke Spalte der Checkboxen sagt aus, ob die "Option" Wahr ist und die rechte Spalte, ob sie Falsch ist.

Eine Option kann natürlich nicht zugleich wahr und falsch sein.
Also müsste ich mit JavaScript (für eine dynamische Anzahl von Zeilen) ausschließen, dass zugleich Wahr und Falsch angeklickt werden kann.

Wenn also z. B. in der linken Checkbox einer Zeile ein Haken gesetzt ist und dann die rechte Checkbox angeklickt wird, soll der linke haken verschwinden, und der rechte erscheinen.

Ich müsste also jeder Checkbox das Attribut "onclick" hinzufügen und eine entsprechende Funktion aufrufen, die den Zustand der Checkbox nebenan ggf. toggelt.

Da ich aber nicht soo vertraut mit JavaScript bin, habe ich keine Ahnung, wie ich diese Aufgabe (die mit ziemlich großer Sicherheit lösbar ist) lösen soll...

Wenn mir jemand sagen will, dass es mit Radiobuttons einfacher geht, dann bitte ich ihn, auf eine Antwort zu verzichten, da das nicht meine Frage ist...

  1. ich habe zwei Spalten mit einer beliebigen Anzahl von Checkboxen:

    <tr>

    <td><input name="true" value=",1a"  type="checkbox"></td>
    <td><input name="false" value=",1b" type="checkbox"></td>
    </tr>

    name=true_1 value=1
    name=true_1 value=0

    <tr>
    <td><input name="true" value=",2a" type="checkbox"><br></td>
    <td><input name="false" value=",2b" type="checkbox"><br></td>
    </tr>

    name=true_2 value=1
    name=true_2 value=0

    <!--...-->

    
    >   
    > Vorab möchte ich sagen, dass ich mein Problem nicht mit Radiobuttons lösen will, da in jeder Spalte mehrere Auswahlen möglich sind von meiner verwendeten Programmiersprache automatisch in ein Array eingelesen werden können bzw sollen.  
      
    Dein Problem ist ein Scheinproblem, verursacht durch falsche Verwendung des name Attributs.  
      
    mfg Beat
    
    -- 
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    Der Valigator leibt diese Fische
    
    1. Dein Problem ist ein Scheinproblem, verursacht durch falsche Verwendung des name Attributs.

      Nein, das stimmt schon (siehe hier: http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox@title=http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox)

      Die Elemente für True gehören zusammen und die Elemente von False gehöfen zusammen und werden anschließend aus zwei Arrays ausgelesen. (Das Komma beim Valueattribut musst du dir weg denken, das war ein Tippfehler)

      1. Dein Problem ist ein Scheinproblem, verursacht durch falsche Verwendung des name Attributs.

        Nein, das stimmt schon (siehe hier: http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox@title=http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox)

        Was soll ich mit der Suchanfrage?

        Alles was du willst ist

        <input type=radio name="Eigenschaft[1]" value="0" selected>
        <input type=radio name="Eigenschaft[1]" value="1">

        <input type=radio name="Eigenschaft[2]" value="0" selected>
        <input type=radio name="Eigenschaft[2]" value="1">

        Checkboxen sind dann ok wenn du mehrere Pizzas bestellen willst.

        <input type=checkbox name="Pizza[1]" value="sardellen">
        <input type=checkbox name="Pizza[1]" value="kaese">

        <input type=checkbox name="Pizza[2]" value="sardellen">
        <input type=checkbox name="Pizza[2]" value="kaese">

        Radios für logisch Exklusiv-Oder
        Checkboxen für logisch Oder

        Die Elemente für True gehören zusammen und die Elemente von False gehöfen zusammen und werden anschließend aus zwei Arrays ausgelesen. (Das Komma beim Valueattribut musst du dir weg denken, das war ein Tippfehler)

        Dann würgst du dir wegen deiner Serverseitigen Verarbeitung eine unlogische Formularstruktur auf.

        Denke auch daran: Viele Browser merken sich die Werte zu benannten Felder, wenn du nichts dagegen tust.
        Alle Felder gleich zu benennen hat ungesunde Nebenwirkungen.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Dein Problem ist ein Scheinproblem, verursacht durch falsche Verwendung des name Attributs.

          Nein, das stimmt schon (siehe hier: http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox@title=http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=checkbox)

          Was soll ich mit der Suchanfrage?

          War der Falsche Link...

          Bei meinem ersten Post habe ich noch einen anderen Fehler gemacht.
          Ich meinte eigentlich so ein Konstrukt:

          <input name="Group1" value="1" type="checkbox" onclick="chk(this,1,G1)">  
          <input name="Group1" value="2" type="checkbox" onclick="chk(this,2,G1)">  
            
          <input name="Group2" value="1" type="checkbox"  onclick="chk(this,1,G2)">  
          <input name="Group2" value="2" type="checkbox"  onclick="chk(this,2,G2)">
          

          Also mit dem Gleichen Value bei zwei unterschiedlichen Groups...

          1. Hallo,

            Ich meinte eigentlich so ein Konstrukt:

            <input name="Group1" value="1" type="checkbox" onclick="chk(this,1,G1)">

            <input name="Group1" value="2" type="checkbox" onclick="chk(this,2,G1)">

            <input name="Group2" value="1" type="checkbox"  onclick="chk(this,1,G2)">
            <input name="Group2" value="2" type="checkbox"  onclick="chk(this,2,G2)">

            
            >   
            > Also mit dem Gleichen Value bei zwei unterschiedlichen Groups...  
              
            ja, aber genau das bilden Radio Buttons doch perfekt ab. Radio Buttons würde der Browser automatisch anhand des Namens zusammenfassen, so dass innerhalb der Gruppen Group1 und Group2 nur jeweils einer gewählt sein kann; außerdem ergibt das beim Absenden einen Request der Form  
             ...?Group1=2&Group2=2  
            wobei ich jetzt angenommen habe, dass jeweils die zweite Option (also mit value="2") gewählt war.  
              
            Mit Checkboxen würdest du genau denselben Request erzeugen, solange nur eine Checkbox pro Gruppe markiert ist; du gehst aber das "Risiko" ein, dass auch beide markiert sein könnten, da das browserseitig nicht automatisch ausgeschlossen ist. Der entstehende Request könnte also durchaus auch  
             ...?Group1=2&Group2=1&Group2=2  
            lauten. Hast du dadurch bei der serverseitigen Verarbeitung einen Vorteil? Sicher nicht.  
              
            Also spricht doch eigentlich alles für Radio Buttons - dann bräuchtest du nicht einmal mehr das Javascript, mit dem du bisher das Verhalten von Radio Buttons nachbilden willst.  
              
            So long,  
             Martin  
            
            -- 
            Idealismus wächst mit der Entfernung zum Problem.  
            
            
            1. Also spricht doch eigentlich alles für Radio Buttons - dann bräuchtest du nicht einmal mehr das Javascript, mit dem du bisher das Verhalten von Radio Buttons nachbilden willst.

              Ich sehe einen Nachteil in der Spezifikation, dass man zum ein/ausschalten einer Option eine radiogroup verwenden muss, da eine ungecheckte Box auch keinen Wert übermittelt.

              Manchmal möchte ich einfach nur eine Checkbox dem User vorsetzen.

              Ich habe zwei Anwendungen, in welchen ich nicht die Standardmodule verwende.
              Dort schreibe ich
              <input type="hidden"   name="someprop" value="0">
              <input type="checkbox" name="someprop" value="1">

              In einem normalen Modul wie CGI oder bei PHP erhältst du einen Array
              In meiner Spezialroutine kann ich für bestimmte Feldnamen Sonderbehandlung einschalten. Der zuletzt ankommende Wert überschreibt den früheren Wert.
              Ich bekomme also nur einen Scalar vom Wert 0 oder 1.

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
            2. Mit Checkboxen würdest du genau denselben Request erzeugen, solange nur eine Checkbox pro Gruppe markiert ist; du gehst aber das "Risiko" ein, dass auch beide markiert sein könnten, da das browserseitig nicht automatisch ausgeschlossen ist.

              Und genau das ist meine Anfrage, ich will dies mit Hilfe von JavaScript ausschließen.

              Hast du dadurch bei der serverseitigen Verarbeitung einen Vorteil? Sicher nicht.

              Eben schon, das ist ja der Grund, warum ich meine Frage gestellt habe.
              Das Problem ist halt, dass es von Fall zu Fall unterschiedlich ist, wie viele Checkboxen generiert werden.
              PL/SQL benötigt aber alle möglichen Values als Variable beim Aufruf der Procedure.
              Das sieht dann ungefähr so aus:

              PROCEDURE speichern(pAnm IN VARCHAR2,  
                              pVorname IN VARCHAR2,  
                             pNachname IN VARCHAR2,  
                             pBetriebe IN tab_Betriebe_TYPE,  
                             --...
              

              Nehmen wir an, man kann mehrere Betriebe auswählen, welche dann Automatisch in eine Art Array geschrieben werden. Wir wissen aber vorher nicht, wie viele Betreibe ausgewählt wurden und wie viele es geben kann, da nachträglich, wenn das Programm fertig ist, noch welche (über eine Pflegemaske) dazu kommen.

              Also kann ich nicht verschiedene Radiobuttons mit den Namen Betrieb1, Betrieb2 usw. machen...

              1. Hi,

                Mit Checkboxen würdest du genau denselben Request erzeugen, solange nur eine Checkbox pro Gruppe markiert ist; du gehst aber das "Risiko" ein, dass auch beide markiert sein könnten, da das browserseitig nicht automatisch ausgeschlossen ist.
                Und genau das ist meine Anfrage, ich will dies mit Hilfe von JavaScript ausschließen.

                Noch mal: Das brauchst du nicht, wenn du nicht Checkboxen für etwas missbrauchst, wofür Radiobuttons gedacht sind.

                Das Problem ist halt, dass es von Fall zu Fall unterschiedlich ist, wie viele Checkboxen generiert werden.
                PL/SQL benötigt aber alle möglichen Values als Variable beim Aufruf der Procedure.

                Dann gebe sie ihm.

                Also kann ich nicht verschiedene Radiobuttons mit den Namen Betrieb1, Betrieb2 usw. machen...

                Irgendeine Art der Unterscheidung wirst du aber wohl brauchen.

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Hallo,

    ich habe zwei Spalten mit einer beliebigen Anzahl von Checkboxen:

    <tr>

    <td><input name="true" value=",1a"  type="checkbox"></td>
    <td><input name="false" value=",1b" type="checkbox"></td>
    </tr>
    <tr>
    <td><input name="true" value=",2a" type="checkbox"><br></td>
    <td><input name="false" value=",2b" type="checkbox"><br></td>
    </tr>
    <!--...-->

      
    Eine Tabelle zum Layouten? :((  
      
    
    > Eine Option kann natürlich nicht zugleich wahr und falsch sein.  
    
    Doch, sowas gibt's in JavaScript.  
      
    
    > Ich müsste also jeder Checkbox das Attribut "onclick" hinzufügen und eine entsprechende Funktion aufrufen, die den Zustand der Checkbox nebenan ggf. toggelt.  
      
    onchange ist vielleicht besser.  
    Quick & dirty sowas:  
      
    ~~~javascript
    element.onchange = function() {  
      
        var row   = this.parentNode.parentNode,  
            first = row.children[0].firstChild,  
            last  = row.children[1].firstChild,  
            other = this===first ? last : first;  
      
        other.checked = !this.checked;  
    }  
    
    

    (ungetestet)

    Gruß, Don P

  3. Hi,

    Vorab möchte ich sagen, dass ich mein Problem nicht mit Radiobuttons lösen will,

    Doch, willst du.

    Die linke Spalte der Checkboxen sagt aus, ob die "Option" Wahr ist und die rechte Spalte, ob sie Falsch ist.

    Eine Option kann natürlich nicht zugleich wahr und falsch sein.
    Also müsste ich mit JavaScript [...]

    Nein, damit müsstest du gar nichts.

    Was du solltest, ist Radiobuttons sinnvoll einsetzen. Die Auswahlmöglichkeit einer dieser Optionen, die wahr oder falsch sein können, bildet dabei je ein *Paar* aus zwei Radiobuttons, deren Zusammengehörigkeit du über den gleichen Inhalt des name-Attributes ausdrückst.

    Da ich aber nicht soo vertraut mit JavaScript bin, habe ich keine Ahnung, wie ich diese Aufgabe (die mit ziemlich großer Sicherheit lösbar ist) lösen soll...

    Ohne.

    Wenn mir jemand sagen will, dass es mit Radiobuttons einfacher geht, dann bitte ich ihn, auf eine Antwort zu verzichten, da das nicht meine Frage ist...

    Wenn du nicht bereit bist, ggf. einzusehen, dass du auf dem Holzweg angekommen bist damit deine Lösungsidee der Aufgabenstellung umzusetzen (weil sie schlicht die falsche ist) - dann würde ich dich bitten, gar nicht erst zu fragen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  4. Hallo,

    [code lang=html]<tr>
    <td><input name="true" value=",1a"  type="checkbox"></td>
    <td><input name="false" value=",1b" type="checkbox"></td>
    </tr>

    [...] von meiner verwendeten Programmiersprache automatisch in ein Array [...]

    Weia, lass mich raten: Du sammelst die values ",1a" usw. dann ein und machst mit einer Art eval() ein Array daraus. Deshalb die Kommata in den values, stimmt's? Übel, übel, aber mach nur. Fast jeder hat mal so angefangen...

    Beat und ChrisB haben unbedingt recht: Wenn du es richtig machen willst, dann geht das anders.

    Gruß, Don P

    1. Hallo,

      Weia, lass mich raten: Du sammelst die values ",1a" usw. dann ein und machst mit einer Art eval() ein Array daraus. Deshalb die Kommata in den values, stimmt's? Übel, übel, aber mach nur. Fast jeder hat mal so angefangen...

      Nein, die Kommata habe ich ganz übersehen, und sollten gar nicht drin sein.

      Ich muss das ganze mit PL/SQL machen und das Problem dabei ist, dass man einer Procedure in PL/SQL alle GET bzw. POST (PL/SQL macht da keinen unterschied beim auslesen) übergeben muss.
      Leider weiß ich nicht, wie viele Checkboxen erscheinen und könnte das dann nur mit einer PL/SQL-Tabelle also einem Array machen...