我正在尝试在AJAX中提交表单,所以我必须序列化()数据。但我使用fckEditor
并且jQuery不知道如何处理它,所以在序列化后,我试图手动修改值,但到目前为止没有运气......任何想法
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);
}
答案 0 :(得分:145)
serialize
返回包含表单字段的URL编码字符串。如果您需要附加,请使用标准的URL编码字符串规则,例如:
var values = $("#frmblog").serialize();
values += "&content=" + encodeURIComponent(content_val);
(以上假设在values
调用后serialize
中总会有一个值;如果不一定如此,请根据{{1}确定是否使用&
在添加之前它是空的。)
或者,如果您愿意,可以使用serializeArray
然后添加到数组并使用jQuery.param
将结果转换为查询字符串,但这似乎很长一段时间:
values
更新:在稍后添加的评论中,您说:
问题是,在冻结过程中,在'content'键中设置了一些默认值,所以我不能只附加一个新值,我必须更新已经存在的值“
改变了一切。在URL编码的字符串中查找// 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);
很痛苦,所以我会选择数组:
content
您可能希望将其设为可重复使用的功能。
答案 1 :(得分:4)
这是一个完整的jquery插件,基于@ T.J的答案。你可以打电话
$('form#myForm').awesomeFormSerializer({
foo: 'bar',
})
这将取代或添加参数' foo'有价值的' bar' (或您在对象中添加的任何其他参数)
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 ));
答案 2 :(得分:1)
使用对我有用的以下功能
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;
}
答案 3 :(得分:0)
现在具有JQuery版本。 U可以使用它代替它来编辑当前提交的值(最短的一个)
var values = $("#frmblog").serializeArray();
values.find(input => input.name == 'content').value = content_val;
console.log(values);