【发布时间】:2015-08-29 22:54:10
【问题描述】:
我一直在尝试将值列表添加到对象/关联数组中,以便我可以从多选插件的输入中获取值列表。我想将输入的名称添加为对象键。
问题:似乎没有创建一个列表,只是更新循环中的最后一个输入值......我在这里做错了什么?
var selectObj = {};
$('input').each(function(inputKey)
{
alert($(this).val()); //all input values shown
selectObj[$(this).attr('name')] = $(this).val();
});
alert(JSON.stringify(selectObj)); //last input value shown
期望的结果:
- (1 个多选):
selectObj={"listName1":"12,3,31,4"}
- (2个多选):
selectObj={"listName1":"12,3,31,4"},{"listName2":"1,32,43,5"}
【问题讨论】:
-
所有元素的名称属性是否不同?否则它只会一遍又一遍地设置相同的属性,并解释为什么只显示最后一个输入结果。没有看到标记很难分辨。
-
你能显示生成的源代码吗?我怀疑多选插件
-
我使用该名称是因为它代表所有多选输入,而不是单个输入的 id...而且它适用于另一个使用相同名称标签的插件...另外我不认为我可以通过插件的选项设置每个输入的 id。
-
@ gillesc : 嗯,它会是一样的,这就是它替换现有值的原因。这是故意的,我试图将下一个值添加到同一个列表中。项目名称代表列表名称,因此可以在同一个表单中使用多个多选。
-
啊,先创建一个数组然后像
if (!selectObj[$(this).attr('name')]) { selectObj[$(this).attr('name')] = []; } selectObj[$(this).attr('name')].push(value_here);