我如何修改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 ));