Frage Wie ändere ich serialisierte Formulardaten in jQuery?


Ich versuche mein Formular in AJAX einzureichen, also muss ich die Daten serialisieren (). Aber ich benutze fckEditor und jQuery weiß nicht, wie man damit umgeht, also versuche ich nach der Serialisierung den Wert manuell zu ändern, aber bisher kein Glück ... irgendwelche Ideen

if(content_val!=""){
    var values = $("#frmblog").serialize();
    values.content = content_val; //content_val is the manually fetched data which I am trying to insert into the serialized content.
    alert(content_val); alert(values);
}

75
2018-02-22 08:32


Ursprung


Antworten:


serialize Gibt eine URL-codierte Zeichenfolge mit den Formularfeldern zurück. Wenn Sie dazu eine App hinzufügen müssen, verwenden Sie dazu die standardmäßigen URL-codierten Zeichenfolgenregeln, z. B .:

var values = $("#frmblog").serialize();
values += "&content=" + encodeURIComponent(content_val);

(Das obige nimmt an, dass es immer einen Wert geben wird values nach dem serialize Anruf; Wenn das nicht unbedingt der Fall ist, bestimmen Sie, ob Sie verwenden möchten & basierend darauf, ob values ist leer, bevor Sie hinzufügen.)

Alternativ, wenn Sie möchten, können Sie verwenden serializeArray und dann zum Array hinzufügen und verwenden jQuery.param Um das Ergebnis in eine Abfragezeichenfolge umzuwandeln, scheint das ein langer Weg zu sein:

// You can also do this, but it seems a long way 'round
var values = $("#frmblog").serializeArray();
values.push({
    name: "content",
    value: content_val
});
values = jQuery.param(values);

Aktualisieren: In einem späteren Kommentar haben Sie gesagt:

Das Problem ist, dass einige Standardwerte im 'content' Schlüssel während des serilisation Prozesses gesetzt werden, also kann ich nicht einfach einen neuen Wert anhängen, ich muss den bereits darin enthaltenen aktualisieren "

Das ändert die Dinge. Es ist ein Schmerz zu suchen content innerhalb der URL-codierten Zeichenfolge, also würde ich mit dem Array gehen:

var values, index;

// Get the parameters as an array
values = $("#frmblog").serializeArray();

// Find and replace `content` if there
for (index = 0; index < values.length; ++index) {
    if (values[index].name == "content") {
        values[index].value = content_val;
        break;
    }
}

// Add it if it wasn't there
if (index >= values.length) {
    values.push({
        name: "content",
        value: content_val
    });
}

// Convert to URL-encoded string
values = jQuery.param(values);

Wahrscheinlich möchten Sie dies zu einer wiederverwendbaren Funktion machen.


141
2018-02-22 08:35



Hier ist ein vollständiges jQuery-Plugin, das auf der Antwort von @ T.J basiert. Du kannst anrufen

$('form#myForm').awesomeFormSerializer({
    foo: 'bar',
})

Das ersetzt oder fügt den Parameter 'foo' mit dem Wert 'bar' (oder einem anderen Parameter, den Sie in das Objekt einfügen) hinzu

jQuery-Plugin:

// Not builtin http://stackoverflow.com/a/5075798/2832282
(function ( $ ) {
    // Pass an object of key/vals to override
    $.fn.awesomeFormSerializer = function(overrides) {
        // Get the parameters as an array
        var newParams = this.serializeArray();

        for(var key in overrides) {
            var newVal = overrides[key]
            // Find and replace `content` if there
            for (index = 0; index < newParams.length; ++index) {
                if (newParams[index].name == key) {
                    newParams[index].value = newVal;
                    break;
                }
            }

            // Add it if it wasn't there
            if (index >= newParams.length) {
                newParams.push({
                    name: key,
                    value: newVal
                });
            }
        }

        // Convert to URL-encoded string
        return $.param(newParams);
    }
}( jQuery ));

3
2018-01-06 08:50