jQuery / JavaScript代码说明

时间:2016-06-12 11:25:31

标签: javascript jquery

我一直在寻找一种使用jQuery将表单数据转换为JavaScript对象的方法,我遇到了这个帖子:Convert form data to JavaScript object with jQuery 最流行的答案中包含以下代码:

$.fn.serializeObject = function() {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) { // ???
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
};

然而,其中有一段代码我不确定正在做什么(我认为这是一个错误)

if (!o[this.name].push) {
   o[this.name] = [o[this.name]];
}

对象没有名为push的属性。有一个JS数组方法.push(),除了将元素推入数组之外,它还返回数组中元素的数量,但在这种情况下,没有大括号,更不用说了,正如你所看到的,{{1是一个对象。我用console.log尝试了这个代码,但它永远不会执行。你们有什么想法,这个if语句的目的是什么?此代码也在其他线程中,因此我不确定此代码的作者是谁。

提前谢谢

1 个答案:

答案 0 :(得分:1)

检查o[this.name]是否为数组是一种愚蠢的方法:

if (!$.isArray(o[this.name])) {
    o[this.name] = [o[this.name]];
}

然而,原因是你有多个具有相同名称的表单元素:

<input type="checkbox" name="a[]" value="1">
<input type="checkbox" name="a[]" value="2">

如果两者都被选中,则输出将转换为数组而不是字符串:

{
  "a": ["1", "2"]
}

如果只选中一个:

{
  "a": "1"
}