2016-05-19 4 views
0

Я работаю над формой обновления, которая должна принимать цену в поле ввода и обновлять ее в массив с идентификатором как уникальный идентификатор. Имея в виду, что обновление последней цены отменяет предыдущую установленную цену.Поле обновления массива Javascript, значение параметра для каждого элемента массива

<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

Потому что он всегда указывает на ту же ссылку на объект. Поэтому 'objects [id]' всегда будет указывать на один и тот же объект. –

+0

@EvanTrimboli на самом деле в скрипке у меня разные поля ввода с разными идентификаторами –

+0

@EvanTrimboli Я обновил вопрос, что он создает новый 'array_list', чтобы цена для нового и всех старых была установлена ​​на одинаковое число –

ответ

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(); 
}); 

я опустил часть о ид, что на самом деле не делает много смысла. У вас уже есть объект, к которому вы пытаетесь выполнить запрос.

Смежные вопросы