jQuery serialize registriert keine Checkboxen

Lesezeit: 7 Minuten

Ich verwende jQuery.serialize, um alle Datenfelder in einem Formular abzurufen.

Mein Problem ist, dass es keine Kontrollkästchen abruft, die nicht aktiviert sind.

Das beinhaltet:

<input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" checked="checked" />

aber nicht dies

<input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" />

Wie kann ich “Werte” von Kontrollkästchen erhalten, die nicht aktiviert sind?

  • Was wir in ASP Net tun, ist eine versteckte Eingabe: <input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" checked="checked" Value="On" /> <input type="hidden" name="event_allDay" Value="Off" /> Auf diese Weise wird, wenn es nicht aktiviert ist, der Wert des Versteckten übernommen

    – Carlos Martínez T

    11. Februar 14 um 11:25 Uhr

jQuery serialize registriert keine
Mydoghaswürmer

Um auf der genialen Antwort von Azatoth aufzubauen, habe ich sie für mein Szenario leicht erweitert:

    /* Get input values from form */
    values = jQuery("#myform").serializeArray();

    /* Because serializeArray() ignores unset checkboxes and radio buttons: */
    values = values.concat(
            jQuery('#myform input[type=checkbox]:not(:checked)').map(
                    function() {
                        return {"name": this.name, "value": false}
                    }).get()
    );

  • hat bei mir nicht funktioniert, also habe ich eine kleine Änderung vorgenommen: return {“name”: this.name, “value”: ‘off’ }

    – xeo

    2. Februar 14 um 6:34 Uhr


  • Ich liebe dich. Ich habe mich bemüht, eine Lösung für mein Problem zu finden, und diese kam über Google. Danke schön

    – Justin

    7. März 14 um 0:01 Uhr

  • Danke schön! Das ist genau das, was ich brauchte!

    – jared_flack

    20. März 15 um 0:24 Uhr

  • funktioniert nur, wenn Sie verwenden serializeArray() nicht nur serialize()

    – Chaudhry Waqas

    14. April 17 um 22:25 Uhr

  • Dies funktionierte für mich besser als die akzeptierte Antwort, aber „this.checked“ gab mir den Status des Kontrollkästchens, anstatt „this.value“ zu verwenden. Ich habe auch den jquery-Selektor in “:checkbox” geändert, weil ich alle Kontrollkästchen benötigte.

    – Paulus

    23. Januar 18 um 12:39 Uhr


jQuery serialize registriert keine
Andi E

jQuery serialize ahmt genau nach, wie ein Standardformular vom Browser serialisiert würde, bevor es an die Abfragezeichenfolge oder den POST-Text in der Anforderung angehängt wird. Nicht aktivierte Kontrollkästchen werden vom Browser nicht eingefügt, was wirklich sinnvoll ist, da sie einen booleschen Zustand haben – sie werden entweder vom Benutzer ausgewählt (eingeschlossen) oder nicht vom Benutzer ausgewählt (nicht eingeschlossen).

Wenn Sie es in den serialisierten Dateien benötigen, sollten Sie sich fragen: “Warum? Warum nicht einfach in den Daten nachsehen, ob es vorhanden ist?”.

Denken Sie daran, dass, wenn sich die Art und Weise, wie JavaScript Formulardaten serialisiert, anders verhält als der Browser, Sie jede Möglichkeit einer ordnungsgemäßen Verschlechterung Ihres Formulars ausschließen. Wenn Sie es trotzdem unbedingt tun müssen, verwenden Sie einfach a <select> Feld mit Ja/Nein als Optionen. Wenigstens werden dann Benutzer mit deaktiviertem JS nicht von Ihrer Site abgeschreckt und Sie verstoßen nicht gegen das in der HTML-Spezifikation definierte Verhalten.

<select id="event_allDay" name="event_allDay">
   <option value="0" selected>No</option>
   <option value="1">Yes</option>
</select>

Ich habe dies in der Vergangenheit auf einigen Websites gesehen und dachte mir immer, “Warum verwenden sie nicht einfach ein Kontrollkästchen”?

  • Es würde es viel einfacher machen, Informationen in DB zu speichern. Denn dann würde die Anzahl der Felder von Serialize der Anzahl der Felder in der Tabelle entsprechen. Jetzt muss ich kontrollieren, welche fehlen.

    – Stefan

    13. Juni 10 um 10:59 Uhr

  • Es gibt gute Gründe dafür, nicht markierte Kontrollkästchen und nicht gesetzte Radiobuttons zu wollen. Die Werte für diese Felder sind möglicherweise bereits auf dem Server vorhanden und Sie möchten sie lediglich aktualisieren. Da diese Werte nicht in Ihrer Übermittlungszeichenfolge enthalten sind, wird davon ausgegangen, dass Sie den Datensatz jedes Mal vollständig überschreiben.

    – Mydoghaswürmer

    18. August 11 um 10:37 Uhr

  • @mydog: warum sollte das jemals der Fall sein? Es scheint eine schlechte Designwahl zu sein, wenn Sie mich fragen. Diese Felder würden niemals in der Abfragezeichenfolge enthalten sein, wenn der Browser die Formulardaten übermittelt. Warum sollten Sie es also für JavaScript anders gestalten? Sie würden für den Anfang jede Chance einer würdevollen Verschlechterung vollständig ausschließen.

    – Andi E

    18. August 11 um 13:35 Uhr

  • @AndyE Manchmal haben Sie einen Server, der dies erfordert alle die Optionen explizit sein. Warum sollte das ein seltener Fall sein?

    – Glenn

    12. Februar 13 um 2:28 Uhr

  • HTML sollte sich wie eine Ansicht verhalten und keine Entscheidungen darüber treffen, welche Daten an einen „Controller“ gesendet werden. Wie die Daten interpretiert werden, sollte in der Verantwortung des “Controllers” liegen – der Sache, die die Formularpost bearbeitet.

    – Muglio

    19. Mai ’15 um 6:31 Uhr

Sie müssen dies nicht tun, da serialize als Abfragezeichenfolge verwendet werden soll, und in diesem Zusammenhang bedeutet nicht aktiviert, dass es überhaupt nicht in der Abfragezeichenfolge enthalten ist.

Wenn Sie wirklich die Werte von nicht aktivierten Kontrollkästchen erhalten möchten, verwenden Sie: (natürlich ungetestet)

var arr_unchecked_values = $('input[type=checkbox]:not(:checked)').map(function(){return this.value}).get();

  • Die folgende Antwort erweitert dies gut.

    – dampfbetrieben

    5. Januar 12 um 0:01 Uhr

1643905268 924 jQuery serialize registriert keine
Mazatec

Wenn Sie Ihrer Abfragezeichenfolge deserialisierte Kontrollkästchen hinzufügen möchten, fügen Sie Folgendes zu Ihrer jquery-Submit-Funktion hinzu:

var moreinfo = '';

$('input[type=checkbox]').each(function() {     
    if (!this.checked) {
        moreinfo += '&'+this.name+'=0';
    }
});

1643905269 490 jQuery serialize registriert keine
Zorn

jQuery serialize ruft das Wertattribut von Eingaben ab.

Wie bekomme ich nun das Kontrollkästchen und das Optionsfeld zum Laufen? Wenn Sie das Click-Ereignis des Kontrollkästchens oder Radio-Buttons auf 0 oder 1 setzen, können Sie die Änderungen sehen.

$( "#myform input[type="checkbox"]" ).on( "click", function(){
     if ($(this).prop('checked')){
          $(this).attr('value', 1);
     } else {
          $(this).attr('value', 0);
     }
 }); 

 values = $("#myform").serializeArray();

und auch wann immer Sie das Kontrollkästchen mit aktiviertem Status setzen möchten, z. B. php

<input type="checkbox" value="<?php echo $product['check']; ?>" checked="<?php echo $product['check']; ?>" />

  • Dieser Code funktioniert. Es lässt das Kontrollkästchen-Steuerelement im Grunde wie eine normale Eingabe aussehen ( type text, oder ein select) zum serialize() Funktion durch Angabe der Checkbox a value -Eigenschaft – die mit dem überprüften Status synchron bleibt. Und es ist eleganter als die ausgewählte Antwort.

    – Annabel

    14. November 18 um 0:08 Uhr


  • Für .Net MVC ermöglicht die Verwendung von Werten von True und False der mvc-Modellzuordnungsmagie, Ihre booleschen Modelleigenschaften festzulegen. Und fügen Sie diese Attribute zu Ihrem hinzu, um die richtige Darstellung der Ansicht zu erhalten: value=”@(Model.Item2.IsCurrent ? “True” : “False” )” @(Model.Item2.IsCurrent ? “checked=’checked'” : “” )

    – DavidCC

    18. Januar 20 um 0:15 Uhr

1643905269 259 jQuery serialize registriert keine
Wunderland

Hier ist eine weitere Lösung, die die Methode „serializeArray“ erweitert (unter Beibehaltung des ursprünglichen Verhaltens).

//Store the reference to the original method:

var _serializeArray = $ji.fn.serializeArray;

//Now extend it with newer "unchecked checkbox" functionality:
$ji.fn.extend({
    serializeArray: function () {
        //Important: Get the results as you normally would...
        var results = _serializeArray.call(this);

        //Now, find all the checkboxes and append their "checked" state to the results.
        this.find('input[type=checkbox]').each(function (id, item) {
            var $item = $ji(item);
            var item_value = $item.is(":checked") ? 1 : 0;
            var item_name = $item.attr('name');
            var result_index = null;
            results.each(function (data, index) {
                if (data.name == item_name) {
                    result_index = index;
                }
            });

            if (result_index != null) {
                // FOUND replace previous value
                results[result_index].value = item_value;
            }
            else {
                // NO value has been found add new one
                results.push({name: item_name, value: item_value});
            }
        });
        return results;
    }
});

Dadurch werden tatsächlich “wahre” oder “falsche” boolesche Ergebnisse angehängt, aber wenn Sie es vorziehen, können Sie “1” bzw. “0” verwenden, indem Sie den Wert auf ändern value: $item.is(":checked") ? 1 : 0.

Verwendung

Rufen Sie wie gewohnt die Methode in Ihrem Formular auf: $form.serialize() oder $form.serializeArray(). Was passiert, ist das serialize nutzt serializeArray wie auch immer, so dass Sie mit der von Ihnen aufgerufenen Methode die richtigen Ergebnisse (wenn auch in unterschiedlichem Format) erhalten.

  • Dieser Code funktioniert. Es lässt das Kontrollkästchen-Steuerelement im Grunde wie eine normale Eingabe aussehen ( type text, oder ein select) zum serialize() Funktion durch Angabe der Checkbox a value -Eigenschaft – die mit dem überprüften Status synchron bleibt. Und es ist eleganter als die ausgewählte Antwort.

    – Annabel

    14. November 18 um 0:08 Uhr


  • Für .Net MVC ermöglicht die Verwendung von Werten von True und False der mvc-Modellzuordnungsmagie, Ihre booleschen Modelleigenschaften festzulegen. Und fügen Sie diese Attribute zu Ihrem hinzu, um die richtige Darstellung der Ansicht zu erhalten: value=”@(Model.Item2.IsCurrent ? “True” : “False” )” @(Model.Item2.IsCurrent ? “checked=’checked'” : “” )

    – DavidCC

    18. Januar 20 um 0:15 Uhr

1643905269 887 jQuery serialize registriert keine
Ferhat KOÇER

Du kannst anrufen handleInputs() Fügen Sie Ihre Submit-Funktion vor Ajax hinzu

function handleInputs(){
    $('input[type=checkbox]').each(function() {     
        if (!this.checked) {
            $(this).attr("value","0");
        }else{
            $(this).attr("value","1");
        }
    });
}

Es funktioniert perfekt

.

757430cookie-checkjQuery serialize registriert keine Checkboxen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy