首页 » SEO优化 » phpserializebug技巧_看我若何解决jqserialize表单序列化的一个小bug

phpserializebug技巧_看我若何解决jqserialize表单序列化的一个小bug

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

这是一个很好用的函数,用过的你肯定知道。
但是ghostsf最近创造一个小bug(大概不应该叫bug,姑且称之)。
便是当radio或checkbox 未选中时,没有序列化到工具中。

什么缘故原由呢?下面剖析之:

phpserializebug技巧_看我若何解决jqserialize表单序列化的一个小bug

瞄一眼源码:From jQuery JavaScript Library v2.1.4

phpserializebug技巧_看我若何解决jqserialize表单序列化的一个小bug
(图片来自网络侵删)

不得不说代码写得很凝练。
我们可以看到我们调用的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

标签:

相关文章

phpsqlitefopen技巧_SQLite的13个运用场景

C/S SQL数据库引擎实现企业级数据共享,他们强调数据的可伸缩性,并发性,中央性和掌握性;SQLite 为独立运用和设备供应本地...

SEO优化 2024-12-11 阅读0 评论0

partnerphp技巧_聊聊AWK敕令的那些事

作为一个大数据开拓,先来一个我比较喜好的口试题。对付下面的nginx日志access.log,用脚本剖析出访问ip的Top 10。...

SEO优化 2024-12-11 阅读0 评论0