1

serializeArray()用于具有空字段的表单时,它会""为所有这些字段返回。除了遍历数组并一一删除之外,从数组中省略那些空字段的最佳方法是什么?

4

2 回答 2

6

迭代是必要的,因为 serializeArray 创建了一个对象数组,并且必须检查每个值。
使用过滤器似乎合适:

$('form').serializeArray().filter(function(k) {
    return $.trim(k.value) != "";
});

小提琴

于 2013-08-19T23:52:28.867 回答
1

如果您不想过滤结果数组,或者想将请求的行为应用于项目中的所有表单,您可以为表单的属性元素创建 jquery挂钩并根据需要过滤表单字段。所以只会看到你允许它看到的元素。serializeArray()

只需在初始化部分的某处添加此代码:

$.propHooks.elements = {
  get: function(elem) {
    var result = Array.prototype.slice.call(elem.elements);
    result = result.filter(function(elem) {
      //filtering out text fileds with empty value
      return !(elem.type === 'text' || elem.type === 'textarea' || elem.type === 'hidden')
        || elem.value
    });
    return result;
  }
};

jsFiddle 示例

于 2013-08-20T00:24:45.080 回答