2016-06-12 57 views
0

我一直在寻找一种方式来表单数据JavaScript对象转换与jQuery和我碰到这个线程传来:Convert form data to JavaScript object with jQuery 最受欢迎的答案是有这个代码是:的jQuery/JavaScript代码的解释

$.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]]; 
} 

对象没有属性命名的推动。有一个JS数组方法.push(),除了将元素推入数组之外,它还返回数组中元素的数量,但在这种情况下,没有大括号,更别说了,如您所见,o是一个对象。我用console.log试过这段代码,但它从不执行。你们有没有任何想法,这个if语句的目的是什么?此代码也在其他线程中,因此我不确定此代码的作者是谁。

预先感谢您

+0

请把标题更具描述性的,即一个人的适用于相关的一切的JavaScript/jQuery的。 – JackHasaKeyboard

回答

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" 
} 
+0

感谢您的解释,但它不回答这个问题(除非我失去了一些东西)。 –

+0

@EfthyvoulosTsouderos你在问它在那里做什么,如果它需要的话?我给你一个例子,说明为什么需要它。我错过了什么吗? – andlrc

+0

好吧我想我现在得到它,如果它有属性(数组方法推)是一个数组。是对的吗? –