Estoy tratando de enviar mi formulario en AJAX, así que tengo que serializar () los datos. Pero estoy usando fckEditor
y jQuery no sabe cómo lidiar con eso, así que después de la serialización, estoy tratando de modificar manualmente el valor, pero no tuve suerte hasta ahora ... alguna idea
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
fuente
fuente
Respuestas:
serialize
devuelve una cadena codificada en URL que contiene los campos del formulario. Si necesita agregarlo, hágalo utilizando las reglas estándar de cadenas codificadas en URL, por ejemplo:var values = $("#frmblog").serialize(); values += "&content=" + encodeURIComponent(content_val);
(Lo anterior asume que siempre habrá un valor
values
después de laserialize
llamada; si eso no es necesariamente cierto, determine si usar en&
función de sivalues
está vacío antes de agregarlo).Alternativamente, si lo desea, puede usar
serializeArray
y luego agregar a la matriz y usarjQuery.param
para convertir el resultado en una cadena de consulta, pero eso parece un largo camino:// 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);
Actualización : en un comentario agregado más tarde, dijiste:
Eso cambia las cosas. Es difícil buscar
content
dentro de la cadena codificada en URL, así que iría con la matriz: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);
Probablemente desee que esta sea una función reutilizable.
fuente
Aquí hay un complemento de jquery completo basado en la respuesta de @ TJ. Puedes llamar
$('form#myForm').awesomeFormSerializer({ foo: 'bar', })
Que reemplazará o agregará el parámetro 'foo' con el valor 'bar' (o cualquier otro parámetro que agregue en el objeto)
Complemento jQuery:
// 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 ));
fuente
Con ES15 ahora. Puede usar este en lugar de uno para editar el valor enviado actual (el más corto)
var values = $("#frmblog").serializeArray(); values.find(input => input.name == 'content').value = content_val; console.log(values);
o función nativa
var values = $("#frmblog").serializeArray(); values.find(function(input) { return input.name == 'content'; }).value = content_val; console.log(values);
fuente
usa la siguiente función, funcionó para mí
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; }
fuente