Each always returns the last term of a JQUERY table

Asked

Viewed 50 times

2

I have the following code running through a table that contains data, but I don’t know why it always returns the last item when I select an object. It does not return the other items.

Code:

$('.btn-finalizar-pedido').click(function () {

  //sessionStorage.removeItem('dadosproduto');

  let objeto_1 = [];
  let obj_1 = new Object();

  var produtosArray1 = "";
  var id_produto_selecionado = "";
  var nome_produto_selecionado = "";
  var comprimento_produto_selecionado = "";
  var largura_produto_selecionado = "";
  var espessura_produto_selecionado = "";
  var quantidade_produto_selecionado = "";
  var preco_produto_selecionado = "";
  var novo_preco_produto_selecionado = "";

  $('.tabela-produtos .produtos-tabela tr').each(function()
  {
    id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
    nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
    comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
    largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
    espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
    quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
    preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
    novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

    obj_1.id_produto = id_produto_selecionado;
    obj_1.quantidade = quantidade_produto_selecionado;
    obj_1.comprimento = comprimento_produto_selecionado;
    obj_1.largura = largura_produto_selecionado;
    obj_1.espessura = espessura_produto_selecionado;
    obj_1.novo_preco = novo_preco_produto_selecionado;
    obj_1.preco_produto = preco_produto_selecionado;
    obj_1.nome = nome_produto_selecionado;

    objeto_1.push(obj_1);

    produtosArray1 = JSON.stringify(objeto_1);
    console.log(produtosArray1);
    sessionStorage.setItem('dados', produtosArray1);
  });
});

I tried so:

  let objeto_1 = [];
  let obj_1 = new Object();

   $('.btn-finalizar-pedido').click(function () {

   var produtosArray1 = "";
   var id_produto_selecionado = "";
   var nome_produto_selecionado = "";
   var comprimento_produto_selecionado = "";
   var largura_produto_selecionado = "";
   var espessura_produto_selecionado = "";
   var quantidade_produto_selecionado = "";
   var preco_produto_selecionado = "";
   var novo_preco_produto_selecionado = "";

   $('.tabela-produtos .produtos-tabela tr').each(function()
   {
id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

obj_1.id_produto = id_produto_selecionado;
obj_1.quantidade = quantidade_produto_selecionado;
obj_1.comprimento = comprimento_produto_selecionado;
obj_1.largura = largura_produto_selecionado;
obj_1.espessura = espessura_produto_selecionado;
obj_1.novo_preco = novo_preco_produto_selecionado;
obj_1.preco_produto = preco_produto_selecionado;
obj_1.nome = nome_produto_selecionado;

objeto_1.push(obj_1);

  produtosArray1 = JSON.stringify(objeto_1);
  sessionStorage.setItem('dadosproduto', produtosArray1);
  });

 });

It also didn’t work out so well. I wonder what’s wrong with the code?

  • What is . table-products and . products-table?

  • Are classes of which elements?

  • By code it always returns the last item because you are creating a new array (objeto_1) every time the element with the class .btn-finalizar-pedido is clicked.

  • See: https://answall.com/a/259792/91352

  • .table-products . products-table tr = . table_products = table-products-table is a tbody

  • @Andregusmao I tried but it didn’t work

  • @The following table-products . products-table tr = . table_products = table-products = table-products and products-table is a tbody

  • If you found the answer useful, be sure to dial ✔

Show 3 more comments

1 answer

0


The solution is to put the let obj_1 = new Object(); within the loop so that each loop the object is recreated, otherwise Javascript understands that the object is the same and overwrites the array with the last value passed.

The code would look like this:

$('.btn-finalizar-pedido').click(function () {

  //sessionStorage.removeItem('dadosproduto');

  let objeto_1 = [];

  var produtosArray1 = "";
  var id_produto_selecionado = "";
  var nome_produto_selecionado = "";
  var comprimento_produto_selecionado = "";
  var largura_produto_selecionado = "";
  var espessura_produto_selecionado = "";
  var quantidade_produto_selecionado = "";
  var preco_produto_selecionado = "";
  var novo_preco_produto_selecionado = "";

  $('.tabela-produtos .produtos-tabela tr').each(function()
  {

    let obj_1 = new Object();

    id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
    nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
    comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
    largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
    espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
    quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
    preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
    novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

    obj_1.id_produto = id_produto_selecionado;
    obj_1.quantidade = quantidade_produto_selecionado;
    obj_1.comprimento = comprimento_produto_selecionado;
    obj_1.largura = largura_produto_selecionado;
    obj_1.espessura = espessura_produto_selecionado;
    obj_1.novo_preco = novo_preco_produto_selecionado;
    obj_1.preco_produto = preco_produto_selecionado;
    obj_1.nome = nome_produto_selecionado;

    objeto_1.push(obj_1);

    produtosArray1 = JSON.stringify(objeto_1);
    console.log(produtosArray1);
    sessionStorage.setItem('dados', produtosArray1);
  });
});

Browser other questions tagged

You are not signed in. Login or sign up in order to post.