387 Stimmen

POST nicht markierte HTML-Kontrollkästchen

Ich habe eine ganze Reihe von Kontrollkästchen, die standardmäßig aktiviert sind. Meine Benutzer werden wahrscheinlich ein paar (wenn überhaupt) der Kontrollkästchen deaktivieren und den Rest aktiviert lassen.

Gibt es eine Möglichkeit, das Formular POST die Kontrollkästchen, die sind nicht überprüft werden, und nicht die, die sind überprüft?

589voto

Sam Punkte 13462

Die Lösung, die mir bisher am besten gefallen hat, ist eine versteckte Eingabe mit demselben Namen wie das Kontrollkästchen, das möglicherweise nicht aktiviert ist. Ich denke, es funktioniert so, dass, wenn das Kontrollkästchen nicht angekreuzt ist, die versteckte Eingabe trotzdem erfolgreich ist und an den Server gesendet wird, aber wenn das Kontrollkästchen angekreuzt ist, wird die versteckte Eingabe davor überschrieben. Auf diese Weise müssen Sie nicht mehr nachverfolgen, welche Werte in den gesendeten Daten von den Kontrollkästchen stammen sollten.

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

249voto

vishnu Punkte 2730

Fügen Sie eine versteckte Eingabe für das Kontrollkästchen mit einer anderen ID hinzu:

<input id='testName' type='checkbox' value='Yes' name='testName'>
<input id='testNameHidden' type='hidden' value='No' name='testName'>

Deaktivieren Sie vor dem Absenden des Formulars die ausgeblendete Eingabe auf der Grundlage der überprüften Bedingung:

if(document.getElementById("testName").checked) {
    document.getElementById('testNameHidden').disabled = true;
}

110voto

Marcel Ennix Punkte 1240

Ich habe das Problem durch die Verwendung von Vanilla JavaScript gelöst:

<input type="hidden" name="checkboxName" value="0"><input type="checkbox" onclick="this.previousSibling.value=1-this.previousSibling.value">

Achten Sie darauf, dass zwischen diesen beiden Eingabeelementen keine Leerzeichen oder Zeilenumbrüche stehen!

Sie können verwenden this.previousSibling.previousSibling um "obere" Elemente zu erhalten.

Mit PHP können Sie das benannte versteckte Feld auf 0 (nicht gesetzt) oder 1 (gesetzt) prüfen.

28voto

SimonSimCity Punkte 6101

Ich persönlich bevorzuge es, ein verborgenes Feld mit demselben Namen hinzuzufügen, das verwendet wird, wenn das Kontrollkästchen nicht markiert ist. Aber die Lösung ist nicht so einfach, wie es vielleicht scheint.

Wenn Sie diesen Code hinzufügen:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

Der Browser kümmert sich nicht wirklich darum, was Sie hier tun. Der Browser sendet beide Parameter an den Server, und der Server muss entscheiden, was mit ihnen zu tun ist.

PHP zum Beispiel nimmt den letzten Wert als den zu verwendenden Wert (siehe: Maßgebliche Position der Schlüssel für doppelte HTTP-GET-Abfragen )

Andere Systeme, mit denen ich gearbeitet habe (die auf Java basieren), machen es genau andersherum - sie bieten nur den ersten Wert an. .NET gibt Ihnen stattdessen ein Array mit beiden Elementen

Ich werde versuchen, dies mit node.js, Python und Perl irgendwann zu testen.

25voto

Rameez SOOMRO Punkte 1471

Sie müssen nicht für alle Kontrollkästchen ein ausgeblendetes Feld erstellen, sondern nur meinen Code kopieren. Es wird den Wert des Kontrollkästchens ändern, wenn es nicht markiert ist. value wird zuweisen 0 und wenn das Kontrollkästchen markiert ist, dann weisen Sie value1

$("form").submit(function () {

    var this_master = $(this);

    this_master.find('input[type="checkbox"]').each( function () {
        var checkbox_this = $(this);

        if( checkbox_this.is(":checked") == true ) {
            checkbox_this.attr('value','1');
        } else {
            checkbox_this.prop('checked',true);
            //DONT' ITS JUST CHECK THE CHECKBOX TO SUBMIT FORM DATA    
            checkbox_this.attr('value','0');
        }
    })
})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X