我正在处理一个更新表单,该表单应该在输入字段中定价并将其更新为一个id为唯一ID的数组。有问题的是它更新最后的价格会覆盖先前的设定价格。
<input placeholder="None" class="price" id="114157">
<input placeholder="None" class="price" id="114158">
<input placeholder="None" class="price" id="114159">
Javascript
var objects = {};
var array_list = {'price':false, 'tue_price':false, 'view': false, 'cinema': false, 'id': false, 'kids_price': false, 'free_seating': false, 'vip_consetions': false};
$( ".price" ).change(function() {
var id = $(this).attr('id');
if (objects[id]) {
objects[id]['price'] = $(this).val();
}else{
objects[id] = array_list;
objects[id]['price'] = $(this).val();
objects[id]['id'] = $('.price[id='+id+']').val();
}
console.log(objects);
});
我在这里设置了一个示例小提琴:https://jsfiddle.net/natcdgkq/
答案 0 :(得分:0)
问题是您只有array_list
(名字不好)对象的单个副本。因此,每次分配并更改值时,它始终是相同的对象引用。你可以做本质上是一个副本:
var objects = {};
var array_list = {
'price': false,
'tue_price': false,
'view': false,
'cinema': false,
'id': false,
'kids_price': false,
'free_seating': false,
'vip_consetions': false
};
$(".price").change(function() {
var id = $(this).attr('id'),
o = objects[id];
if (!o) {
objects[id] = o = jQuery.extend({}, array_list);
}
o.price = $(this).val();
});
我省略了关于id的部分,这并没有多大意义。您已经拥有了要查询的对象。