在DOM元素上每个Jquery - 推入数组错误

时间:2017-12-16 16:33:23

标签: javascript jquery

我尝试在DOM上使用each()函数来动态添加字段。 但是这个代码我遇到了一个问题:

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

push函数始终推送最后一个子节点,而不是另一个节点,但在我的控制台登录中具有良好的值。

  

log 1:{name:“a”,values:Array(1)}

     

log 2:{name:“b”,values:Array(1)}

     记录3:[

     

{name:“b”,values:Array(1)}

     

{name:“b”,values:Array(1)}

     

为什么?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

通过在函数外声明对象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(",");
  console.log(nouvelle_entree);
  mockSystem.input.push(nouvelle_entree);
});
console.log(mockSystem.input);