2015-06-30 143 views
1

我有很多选择框,这样的:如何在多个输入字段中获取字段索引?

<select class="variants" name="variant[Color]" data-type="Color"> 
    // ... options here 
</select> 

<select class="variants" name="variant[Size]" data-type="Size"> 
    // ... options here 
</select> 

<select class="variants" name="variant[Brand]" data-type="Brand"> 
    // ... options here 
</select> 

然后我通过Ajax发送此,当用户点击提交按钮:

$.post('some_url.php', { 
    id: $(this).attr('data-id'), 
    amount: $('#amount').val(), 
    variants: JSON.stringify(variants) 
}, 
function(data) { 
    // some code here 
}); 

一切工作正常,我只需要设置为variants所有选择框的值如下:

variants: { Color: "Blue", Size: "45", Brand: "Some Brand" } 

如何操作?我尝试这样做:

$('.variants').each(function(i, obj) { 
    variants[$(obj).attr('data-type')] = $(obj).val(); 
}); 

console.log(variants); // here I see an array 

但在$.post有在控制台这样的:

amount  1 
id   14217 
variants [] 

为什么?

回答

1

该选择框是动态的,它并不总是颜色,尺寸和品牌;可以有各种不同名称

在这种情况下可以循环在.variant元件和使用正则表达式来提取变体的类型和应用,作为一个键,其可以在AJAX请求被传递的对象。试试这个:

var variants = {}; 
$('.variants').each(function() { 
    var name = this.name.match(/variant\[(.+)\]/i)[1]; 
    variants[name] = $(this).val(); 
}); 

$.post('some_url.php', { 
    id: $(this).data('id'), 
    amount: $('#amount').val(), 
    variants: variants 
}, function(data) { 
    // some code here 
}); 

Example fiddle

请注意,您不需要在variants对象使用JSON.stringify - jQuery的会为你做这个内部反正。

+0

选择框是动态的,它并不总是颜色,尺寸和品牌;可以有各种各样的变体名称。我更新了我的问题。 – Legionar

+0

好的,我为你更新了我的答案。 –

+0

是的,这是行得通的。谢谢。我想,我可以将它保存在数组中,然后使用'JSON.stringify',但它不工作,不知道为什么。所以我刚把'[]'改成了'{}',现在就ok了。 – Legionar