在javascript中省略serializeArray中的空字符串

时间:2013-08-19 23:14:19

标签: javascript jquery

对于包含空字段的表单使用serializeArray()时,会为所有这些字段返回""。除了迭代数组并逐个删除它们之外,从数组中省略那些空字段的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

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

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

FIDDLE

答案 1 :(得分:1)

如果您不想过滤生成的数组,或者想要将所请求的行为应用于项目中的所有表单,则可以为表单的属性元素创建jquery hook ,根据需要过滤表单字段。因此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 example