Javascript数组更新字段,为数组中的每个项设置值

时间:2016-05-19 10:19:11

标签: javascript jquery

我正在处理一个更新表单,该表单应该在输入字段中定价并将其更新为一个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/

1 个答案:

答案 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的部分,这并没有多大意义。您已经拥有了要查询的对象。