这是一个很好用的函数,用过的你肯定知道。但是ghostsf最近创造一个小bug(大概不应该叫bug,姑且称之)。便是当radio或checkbox 未选中时,没有序列化到工具中。
什么缘故原由呢?下面剖析之:
瞄一眼源码:From jQuery JavaScript Library v2.1.4

不得不说代码写得很凝练。我们可以看到我们调用的serialize(),实在是走的param()方法,这个方法查阅jq手册即可得知,其浸染是将数组或工具序列化为一个 key/value 工具。
显然这个方法不是我们要看的,重点便是serializeArray()了。
大略看下代码(只是大略看了下并未严格测试校验,可能有缺漏)。可以看到map里对付val的处理,判断到是数组的时候jQuery.isArray( val ) ?
直策应用map进行了遍历,这个时候如果这个数组的length是0呢?那么自然当radio或checkbox 未选中时,这边的数组长度是为0的,以是这里就把radio或checkbox给漏掉了。
那么怎么办理呢?直接改源码?这也太粗暴了吧。
ghostsf心血来潮写了一个jq拓展,代码如下:(并不要脸地命名为ghostsf_serialize):
//为jquery.serializeArray()办理radio,checkbox未选中时没有序列化的问题
$.fn.ghostsf_serialize = function () {
var a = this.serializeArray();
var $radio = $('input[type=radio],input[type=checkbox]', this);
var temp = {};
$.each($radio, function () {
if (!temp.hasOwnProperty(this.name)) {
if ($(\公众input[name='\"大众 + this.name + \"大众']:checked\"大众).length == 0) {
temp[this.name] = \"大众\"大众;
a.push({name: this.name, value: \"大众\"大众});
}
}
});
//console.log(a);
return jQuery.param(a);
};
怎么利用呢?
引入即可,然后便是你常用的$(form).ghostsf_serialize()
了。
这样就很轻松地办理此问题了。自己动手丰衣足食。
By ghostsf