2017-12-16 2 views
1

私は自分のDOMでeach()関数を使ってフィールドを動的に追加しようとしています。 しかし、私はこのコードでproblemeをHAVA:DOM要素ごとにJquery - プッシュイン配列エラー

var nouvelle_entree=new Object(); 
    $('div[name="declaration-ligne-entree"]').each(function() { 
    nouvelle_entree.name=$(this).children('input[name="system-input-name"]').val(); 
    nouvelle_entree.values=$(this).children('input[name="system-input-valeur"]').val().split(","); 
    console.log(nouvelle_entree); 
    mockSystem.input.push(nouvelle_entree); 
    }); 
    console.log(mockSystem.input); 

プッシュ機能は常に他の良い値を持っているの私のコンソールログに最後の子をプッシュしていません。

ログ1:{名: "A"、値:配列(1)}

ログ2:{名: "B"、値:配列(1)}

ログ3 [

{名: "B"、値:配列(1)}

{名: "B"、値:配列(1)}

]

なぜですか?

+0

短い答えは、あなたが正確に同じを推進しているあります毎回オブジェクトを配列に追加し、ループの繰り返しごとに値を上書きする – charlietfl

答えて

0

オブジェクトの外にオブジェクトを宣言することによって、同じオブジェクトを何度も上書きしていきます。その結果、最後のオブジェクトだけが配列にプッシュされます。

各反復でオブジェクトを作成します。

$('div[name="declaration-ligne-entree"]').each(function() { 
    var nouvelle_entree = {}; 
    nouvelle_entree.name=$(this).children('input[name="system-input-name"]').val(); 
    nouvelle_entree.values=$(this).children('input[name="system-input-valeur"]').val().split(","); 
    console.log(nouvelle_entree); 
    mockSystem.input.push(nouvelle_entree); 
}); 
console.log(mockSystem.input); 
3

なぜですか?

すべての繰り返しで同じオブジェクトnouvelle_entreeを上書きしているためです。あなたが他のすべての反復だけでなく、初めて、変数にオブジェクトnouvelle_entreeを定義する必要があり

は常に例えば、最後の反復の情報が含まれています:

$('div[name="declaration-ligne-entree"]').each(function() { 
    var nouvelle_entree = {}; 

    nouvelle_entree.name = $(this).children('input[name="system-input-name"]').val(); 
    nouvelle_entree.values = $(this).children('input[name="system-input-valeur"]').val().split(","); 

    mockSystem.input.push(nouvelle_entree); 
}); 

console.log(mockSystem.input); 
関連する問題