Use splice() to remove a value array from an Hidden input

Asked

Viewed 139 times

0

I got the code from a user here who posted (add/remove array to an Hidden input), added a few things and even tried to modify how users who responded suggested, but could not remove the value array from the removed product.

var strong = $('#total'),
total = 0.00;
prod_array = []; // Array de produtos
$('#add_produto').on('click', function () {

   var table = $('#cesta_produtos tbody'), // Tabela de produtos  
   list = $('#lista_produtos').html(), // Select com a lista de produtos
   quant = parseInt($('#mudeValor').val()), // Campo com a quantidade de produtos
   preco = parseFloat($('#preco').val()),

   // Link para remover o produto
   input_hidden = $('#products_array');

   preco = preco * quant;
   preco = parseFloat(preco.toFixed(2));

   // Remove a mensagem de cesta vazia depois que produto é adicionado
   $('#cesta_vazia').remove();
   // Insere o produto selecionado no select list dentro da tabela
   table.append("<tr><td>" + quant + "</td><td>x</td><td>" + list + "</td><td>R$ </td><td>" + preco + "</td><td><a href='#' class='del_produto'><i><strong>X</strong></i></a></td></tr>");
   prod_array.push("[" + quant + "]" + "[" + list + "]");
   input_hidden.val(prod_array);
   console.log("novo produto adicionado :)");
   console.log(input_hidden.val());

   strong = $('#total'),
   total = total + preco;
   total = parseFloat(total.toFixed(2));
   $('#totalold').remove();
   strong.append("<strong id='totalold'>" + total + "</strong>");
});

// Remoção de produtos da tabela
$(document).on('click', '.del_produto', function (e) {
   e.preventDefault();

   var tr = $(this).closest('tr'); //seleciona a tr
   var quant = tr.find('td').eq(0).html(); // seleciona a quantidade
   var list = tr.find('td').eq(2).html(); // seleciona o produto

   strong = $('#total'),
   total = total - preco;
   total = parseFloat(total.toFixed(2));
   $('#totalold').remove();
   strong.append("<strong id='totalold'>" + total + "</strong>");

   //procura a posição no array
   var index = prod_array.indexOf("[" + quant + "]" + "[" + list + "]");
   prod_array.splice(index, 2);//remove do array
   tr.remove(); //remove a linha
   console.log("produto removido :(");
   console.log(prod_array);

});
  • puts a console.log(index); at the end and see what value returns. You may not be finding the string in the array.

  • Man, he recognizes the position the array starts, the two array are equal, the problem is in splice(), he is not removing.

  • This is unequivocal: array = ['red','blue','gray']; index = array.indexOf('blue'); array.splice(index,2);'. The result of the array will be: array=['red'];. Therefore, it is important to check whether theindex is returning to the correct position in prod_array.indexOf("[" + quant + "]" + "[" + list + "]");. It is more consistent to assume that there is some error in your code than to say that the splice is not working.

No answers

Browser other questions tagged

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