何喜阳博客

解决jQuery-serialize()序列化后某些值获取不到的问题

在获取表单中数据的值时,经常用到 jQuery 的serialize()方法,然而这个方法在某些情况下却获取不到需要的值,比如当属性设置为 disabled 时、当 checkbox、radio 没有选中时,这些情况下值都不会被获取。如果不能正常获取,有时会影响到我们的后续流程。

我们不可能把未选中的 dom 全部修改为已选中,这是不符合我们业务需求的,我们要根据是否选中实现后续逻辑。但我们也不可能直接修改 jQuery 的源码,这对于后续维护会带来很多麻烦。此时我们可以自己实现一个方法来解决问题,代码如下:

$.fn.serializeAll = 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: 0 })
      }
    }
  })
  return jQuery.param(a)
}
// 调用代码,直接在原有代码的基础上把 serialize() 改成 serializeAll()
$(form).serializeAll()

如果你有不同的方案,可以在评论区说出来互动。

以上就是全部内容了。如果你觉得内容有帮助,可以扫码打赏,请我吃一顿饭。

微信支付宝

当前页面地址:https://hexiyang.cn/article/1574241170.html

内容基于 《自由转载-非商用-非衍生-保持署名》 协议发布,允许非商用转载,需要保留作者姓名和当前页面链接。