我一直在寻找一种使用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语句的目的是什么?此代码也在其他线程中,因此我不确定此代码的作者是谁。
提前谢谢
答案 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"
}