Ich versuche, mein Formular in AJAX einzureichen, daher muss ich die Daten serialisieren (). Aber ich benutze fckEditor
und jQuery weiß nicht, wie ich damit umgehen soll. Nach der Serialisierung versuche ich, 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);
}
jquery
serialization
fckeditor
Bluemagica
quelle
quelle
Antworten:
serialize
Gibt eine URL-codierte Zeichenfolge zurück, die die Formularfelder enthält. Wenn Sie daran anhängen müssen, verwenden Sie dazu die Standardregeln für URL-codierte Zeichenfolgen, z.var values = $("#frmblog").serialize(); values += "&content=" + encodeURIComponent(content_val);
(Bei den obigen Angaben wird davon ausgegangen, dass
values
nach demserialize
Aufruf immer ein Wert vorhanden ist . Wenn dies nicht unbedingt zutrifft, bestimmen Sie&
anhand des Leerwerts, ob er verwendet werdenvalues
soll, bevor Sie ihn hinzufügen.)Wenn Sie möchten, können Sie alternativ
serializeArray
das Array verwenden und dann hinzufügen undjQuery.param
das Ergebnis in eine Abfragezeichenfolge umwandeln. Dies scheint jedoch 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);
Update : In einem später hinzugefügten Kommentar sagten Sie:
Das ändert die Dinge. Es ist schwierig,
content
in der URL-codierten Zeichenfolge zu suchen , daher würde ich mich für das Array entscheiden: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);
Sie möchten dies wahrscheinlich zu einer wiederverwendbaren Funktion machen.
quelle
Hier ist ein vollständiges JQuery-Plugin, das auf der Antwort von @ TJ basiert. Du kannst anrufen
$('form#myForm').awesomeFormSerializer({ foo: 'bar', })
Dadurch wird der Parameter 'foo' durch den Wert 'bar' (oder einen anderen Parameter, den Sie dem Objekt hinzufügen) ersetzt oder hinzugefügt.
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 ));
quelle
Jetzt mit ES15. Sie können diesen stattdessen zum Bearbeiten des aktuell übermittelten Werts verwenden (der kürzeste).
var values = $("#frmblog").serializeArray(); values.find(input => input.name == 'content').value = content_val; console.log(values);
oder native Funktion
var values = $("#frmblog").serializeArray(); values.find(function(input) { return input.name == 'content'; }).value = content_val; console.log(values);
quelle
Verwenden Sie die folgende Funktion, die bei mir funktioniert hat
function(elementName,newVal) { var postData = $("#formID").serialize(); var res = postData.split("&"); var str = ""; for(i=0;i<res.length;i++) { if(elementName == res[i].split("=")[0]) { str += elementName + "=" + newVal+ "&"; } else { str += res[i] + "&"; } } return str; }
quelle