Herbert1204: eine Checkbox immer aktiviert

Hallo
Ich habe mehrere Checkboxen. Nun möchte ich das so einrichten, dass die User alle Checkboxen auswählen können. Aber wenn die Checkboxen entcheckt werden, soll die letzte Checkbox immer aktiviert bleiben.

Ich habe schon über Google gesucht, aber nichts gefunden.
Gibt es da eine Möglichkeit?

Vielen Dank im Voraus

  1. Hallo,

    Ich habe schon über Google gesucht, aber nichts gefunden.
    Gibt es da eine Möglichkeit?

    Javascript kann die HTML-Elemente nach Belieben beeinflussen.

    Gruß

    jobo

  2. Hi,

    hänge an jede Checkbox einen event listener dran (click, kein change wegen IE bug) und überprüfe, ob es die letzte Checkbox war.

    Wenn ja, checke sie wieder an, bzw. verhindere das Standardverhalten mit preventDefault. (wenn das geht)

    Gruß!

  3. Das hier ist zumindest bei nicht zu vielen Checkboxen möglich (bzw. nicht zu aufwendig):

    JS:

    function check_auswahl(last)  
    {  
      if(!document.getElementById('check1').checked && !document.getElementById('check2').checked)  
      {  
        last.checked = true;  
        alert("Es muss mindestens ein Wert ausgewählt werden.");  
      }  
    }
    

    HTML:

    <input id="check1" type="checkbox" onclick="check_auswahl(this)">  
    <input id="check2" type="checkbox" onclick="check_auswahl(this)">
    

    Bei mehreren Checkboxen müsste man das irgendwie via Schleife abfragen.

  4. Hi,

    Aber wenn die Checkboxen entcheckt werden, soll die letzte Checkbox immer aktiviert bleiben.

    anbei ein kleines Testscript zur Anschauung. Sowas löst man normalerweise mit einer Schleife, die über alle fraglichen Checkboxen läuft und prüft, ob wenigstens eine markiert ist. Der Einfachheit halber verwende ich die gleichen Namen mit abschliessenden Klammern [], das erleichtert mir die Handhabung, aber dennoch kommen alle Werte (als Array) im verarbeitenden Script an:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
    <html>
    <head>
    <script type="text/javascript">
        function check(nam) {
            var i, item, ck     =  document.testform.elements[nam]; // collection aller checkbocen
            var checked_item    =  false;                           // flag, speichert ob gechecked

    // alle checkboxen durchloopen
            // wenn suche erfolgreich flag setzen und abbrechen
            for(i = 0; item = ck[i]; i++) {
                if(item.checked) {
                    checked_item =  true;
                    break;
                }
            }

    // wenn flag nicht gesetzt letzte chechbox markieren
            if(!checked_item) {
                ck[ck.length-1].checked =  true;
            }
        }
    </script>
    <style type="text/css">
        ul, li {list-style:none}
    </style>
    </head>
    <body>
        <form name="testform" action="#">
            <ul>
                <!--
                    die Namensvergabe: 'name[]' (also mit []) erleichtert das Handling, denn alle checkboxen
                    können so den gleichen Namen haben, kommen im verarbeitenden Script aber als Werte-Array an.
                -->
                <li><input onclick="check('testck[]')" name="testck[]" type="checkbox" value="1" /> 1</li>
                <li><input onclick="check('testck[]')" name="testck[]" type="checkbox" value="2" /> 2</li>
                <li><input onclick="check('testck[]')" name="testck[]" type="checkbox" value="3" /> 3</li>
                <li><input onclick="check('testck[]')" name="testck[]" type="checkbox" value="4" /> 4</li>
                <li><input onclick="check('testck[]')" name="testck[]" type="checkbox" value="5" /> 5</li>
            </ul>
        </form>
    </body>
    </html>

    Gruesse, Joachim

    --
    Am Ende wird alles gut.