2016-05-19 49 views
0

我正在處理一個更新表單,該表單應該在輸入字段中將價格更新爲一個數組,並將其作爲唯一標識作爲id。有問題,它更新最後的價格覆蓋了以前的設置價格。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實際上在小提琴中我有不同的輸入字段與不同的ID –

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

我省略了有關id的部分,這並沒有真正做出很多意義。你已經有了你想要查詢的對象。