我如何修改jQuery中的序列化表单数据?

我正在尝试在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); } 

serialize返回一个包含表单字段的URL编码的string。 如果您需要附加到它,您可以使用标准的URL编码的string规则,例如:

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

(上面假设在serialize调用之后总会有一个值;如果不一定是这样,那么在添加之前&根据values是否为空来决定是否使用&

或者,如果你喜欢,你可以使用serializeArray ,然后添加到数组中,并使用jQuery.param将结果转换为查询string,但这似乎是一个漫长的过程:

 // 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); 

更新 :在稍后添加的评论中,您说:

问题是,在serilization过程中在'content'键中有一些默认值被设置,所以我不能只附加一个新的值,我必须更新已经在其中的那个“

这改变了事情。 在URL编码的string中查找content是一件很痛苦的事情,所以我会使用这个数组:

 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); 

你可能想要使这个可重用的function。

这是一个完整的jQuery插件基于@ TJ的答案。 你可以打电话

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

这将取代或添加值“bar”(或任何其他参数添加到对象中)的参数'foo'

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 ));