2016-10-07 4 views
-3

次のコードがあります。 1つのことを除いて、すべて私が望むように正確に動作します。ユーザーが別のitem_nameを入力すると(room_nameはそのまま)、元のitem_nameが消去されます。オブジェクトにオブジェクトを追加したいときにこのコードがオブジェクトを上書きする理由

roominventory[room_name] = obj 

私たちが言っていることです:

Find the key on the object roominventory that is equivalent to the 
value room_name. I now want you to assign the value of obj to that key. 

それはそのように聞こえる私は何を必要とすることは私達が私達の労働者に伝えるとき、それはオブジェクト

<div class="container"> 
    <div class="row"> 
     <div class="col-md-4"> 
      <form> 
       <div class="form-group"> 
        <input type="text" name="room_name" id="room_name" class="form-control" placeholder="Room name"> 
       </div> 
       <div class="form-group"> 
        <input type="text" name="item_name" id="item_name" class="form-control" placeholder="Item name"> 
       </div> 
       <div class="form-group"> 
        <input type="text" name="item_description" id="item_description" class="form-control" placeholder="Item description"> 
       </div> 
       <div class="form-group"> 
        <input type="text" name="inventory" id="inventory" class="form-control" placeholder="DEBUG"> 
       </div> 
       <div class="form-group"> 
        <a id="submitinv" class="btn btn-success btn-block">Submit</a> 
       </div> 
       <table id="list" class="table table-striped"> 
        <tr> 
         <th>ROOM NAME</th> 
         <th>ITEM NAME</th> 
         <th>ITEM DESCRIPTION</th> 
        </tr> 
       </table> 
      </form> 

     </div> 
    </div> 
</div> 
<script> 
roominventory = {}; 
obj = {}; 
$('#submitinv').click(function(){ 
    room_name = $('#room_name').val(); 
    item_name = $('#item_name').val(); 
    item_description = $('#item_description').val(); 
    obj[item_name] = item_description; 
    roominventory[room_name] = obj; 
    $('#inventory').val(JSON.stringify(roominventory)); 
    obj = {}; 
    $('#list').append('<tr><td>' + room_name + '</td><td>' + item_name + '</td><td>' + item_description + '</td></tr>'); 
}); 

</script> 
+1

obj = {};を呼び出してオブジェクトを上書きしています。 –

+0

しかし、私はそれをしない場合、ユーザーが新しいroom_nameを作成するとき、それは元のroom_nameからの情報を引き継ぎます – Clint

+1

それから 'var room_name'を使います。書かれているように、複数のグローバル変数があります。 – Shilly

答えて

0

に別の項目を追加するためのものですあなたの労働者に伝えたいことではありません。あなたはあなたの労働者に伝えたいと思っているように聞こえることは次のとおりです。

はこれを行うには、いくつかの方法があります
Find the key on the object roominventory that is equivalent to the 
value room_name. Now add the object to that value. 

roominventoryオブジェクトの各キーを作成する最も簡単なビーイングは、このような何かをやって配列にすること

// First we check if we have messed with this key before 
if(roominventory[room_name] !== undefined){ 
    // if we have, let's just push our new object onto the list 
    roominventory[room_name].push(obj) 
}else{ 
    // if we haven't, let's create a list of a single item to add to later 
    roominventory[room_name] = [obj] 
} 
+1

Perfect!本当にありがとうTim。それはまさに私が望むものであり、あなたの説明は完璧です。これは何が起こっているかを非常に多くの方法で理解するのに役立ちます。 お返事ありがとうございました Clint – Clint

+0

喜んで私はクリントを助けることができ、あなたの問題が解決したことを嬉しく思います!私はいつも「私は実際に私の労働者に何を伝えているのか、私の労働者は私が彼らに言うときに何を知っていますか?私はそれがデバッグに役立ち、再利用可能なソリューションを考案していることがわかります! –

関連する問題