2016-05-19 7 views
0

私は、入力フィールドで値段をとり、idを一意の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(); 
}); 

私は実際に多くの意味を持っていません。あなたはすでに照会しようとしているオブジェクトを持っています。

関連する問題