我有大约100个 PC规范下拉菜单,如下所示:
<select class="drpProcessor spec-gen" name="processor_id">
<option value=""></option>
<option value="23">Some Processor</option>
</select>
我想要实现的是整个规范的一个对象(即所有100个规范下拉列表及其在对象中的值)如下所示:
var specs = {
processor_id : 21,
ram_id : 34,
motherboard_id: 45,
...
...
};
我知道我可以使用以下内容实现此目的:
var specs = {
processor_id : $('.drpProcessor').val(),
ram_id : $('.drpRam').val(),
motherboard_id: $('.drpMotherBoard').val(),
...
...
};
但这将是一项繁琐的工作(因为我必须写下这100个下拉菜单)。幸运的是,我将这个名称应用于我想要作为相应规范属性的每个下拉列表。所以我继续写下这个小片段,从每个下拉列表中取出名称,并尝试将此名称创建为specs
对象的属性:
var els = $('#deassTab select');
// construct the specs object
var specs = {};
$(els).each(function( index, elem ){
specs.($(elem).prop('name')) = $(elem).val(); // <-- Problem Lies here
})
但它不允许我这样做并给出这个错误:
SyntaxError:意外的令牌(
问题出在specs.($(elem).prop('name'))
,即我尝试通过specs
将此属性添加到string
对象的位置。我能以任何方式实现这一点,即使用字符串创建对象的属性吗?
答案 0 :(得分:4)
错误是一行:
specs.($(elem).prop(name)) = $(elem).val();
其中,当您想使用字符串动态设置属性时,使用方括号语法(并且没有点)来表示该行:
specs[$(elem).prop(name)] = $(elem).val();
哪个可以解决您的问题。