Jump to content

POWERED BY:

joeythai

Não consigo adicionar um valor de forma dinâmica

Recommended Posts

Boa tarde pessoal,

 

Eu criei um formulário em que tenho 3 interações: evento click, change e uma chamada ajax. No evento on change ("select#removal_table_from" )eu faço uma chamada ajax onde eu passo como parametro o id do item selecionado e construo uma tabela dinamica com o próprio javascript, após isto, tenho um input em que o usuario coloca um valor de percentual para que eu possa preencher em 3 colunas da tabela que foi criada dinamicamente: moto_atualizado, carro_atualizado e caminhao_atualizado, até aí tudo bem, o codigo está fazendo isso, porém, como a tabela é criada dinamicamente eu preciso de alguma forma enviar o arrayData para meu backend mas quando faço o calculo dentro do loop apos resposta do meu ajax, os valores desses 3 campos chegam como null, não sei se é possível fazer o que pretendo ou se é ainda não sei como faz

 

<code>

  
 
$(document).ready(function (event) {
 
let arrayData = [];
let percentage;
let removal_vehicle;
let removal_motorcycle;
let removal_tuck;
let apply_removal = $('#apply_removal');
 
// apply_removal.on('click', function () {
// percentage = $('#percentage').val();
 
// $('.table-body tr').each(function () {
 
// let veiculo = $(this).find('.veiculo').text();
// let moto = $(this).find('.moto').text();
// let caminhao = $(this).find('.caminhao').text();
 
// let removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100;
// let removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100;
// let removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;
 
// arrayData.push({
// removal_vehicle,
// removal_motorcycle,
// removal_tuck
// })
 
// $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2));
// $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2));
// $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));
// });
// });
 
apply_removal.on('click', function () {
percentage = $('#percentage').val();
 
$('.table-body tr').each(function () {
 
let veiculo = $(this).find('.veiculo').text();
let moto = $(this).find('.moto').text();
let caminhao = $(this).find('.caminhao').text();
 
removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100;
removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100;
removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;
 
arrayData.push({
removal_vehicle,
removal_motorcycle,
removal_tuck
})
 
$(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2));
$(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2));
$(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));
 
 
console.log('Removal Vehicle:', removal_vehicle);
console.log('Removal Motorcycle:', removal_motorcycle);
console.log('Removal Truck:', removal_tuck);
});
});
 
$('select#removal_table_from').on('change', function (e) {
let table_id = $(this).val();
let action = route('removal.removal-values.show', table_id);
 
$.ajax({
type: "GET",
url: action,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
 
success: function (data) {
$('.table-body').empty();
 
for (let i = 0; i < data.length; i++) {
let carro = parseFloat(data[i].CARRO);
let moto = parseFloat(data[i].MOTO);
let caminhao = parseFloat(data[i].CAMINHAO);
let distancia = data[i].DISTANCIA;
let origem = data[i].ORIGEM;
let destino = data[i].DESTINO;
let localidadeOrigem = data[i].LocalidadeOrigem_ID;
let localidadeDestino = data[i].LocalidadeDestino_ID;
 
let newRow = '<tr class="removal-row">' +
'<td class="align-middle">' +
'<div class="row">' +
'<div class="col-1">' +
'<span class="font-weight-bold">Origem</span><br>' +
'<span class="origem">' + origem + '</span>' +
'</div>' +
'<div class="col-1">' +
'<span class="font-weight-bold">Destino</span><br>' +
'<span class="destino">' + destino + '</span>' +
'</div>' +
'<div class="col-1">' +
'<span class="font-weight-bold">KM</span><br>' +
'<span class="km">' + distancia + '</span>' +
'</div>' +
'<div class="col-1">' +
'<span class="font-weight-bold">Veículo</span><br>' +
'<span class="veiculo">' + carro + '</span>' +
'</div>' +
'<div class="col-2">' +
'<span class="font-weight-bold">Veículo Atualizado</span><br>' +
'<input type="text" class="veiculo_atualizado">' +
'</div>' +
'<div class="col-1">' +
'<span class="font-weight-bold">Moto</span><br>' +
'<span class="moto">' + moto + '</span>' +
'</div>' +
'<div class="col-2">' +
'<span class="font-weight-bold">Moto Atualizado</span><br>' +
'<input type="text" class="moto_atualizado">' +
'</div>' +
'<div class="col-1">' +
'<span class="font-weight-bold">Caminhão</span><br>' +
'<span class="caminhao">' + caminhao + '</span>' +
'</div>' +
'<div class="col-2">' +
'<span class="font-weight-bold">Caminhão Atualizado</span><br>' +
'<input type="text" class="caminhao_atualizado">' +
'</div>' +
'</div>' +
'</div>' +
'</td>' +
'</tr>';
 
$('.table-body').append(newRow);
//let row = $('.removal-row:last');
 
// Calcula o valor atualizado e define nos campos diretamente
// let veiculo_atualizado = carro + (carro * percentage) / 100;
// let moto_atualizado = moto + (moto * percentage) / 100;
// let caminhao_atualizado = caminhao + (caminhao * percentage) / 100;
// console.log('PORCENTS: ', percentage);
//console.log('Veiculo Atualizado:', veiculo_atualizado, 'Moto Atualizado:', moto_atualizado, 'Caminhao Atualizado:', caminhao_atualizado);
 
// Define os valores diretamente nos campos da nova linha
// row.find('.veiculo_atualizado').val(veiculo_atualizado.toFixed(2));
// row.find('.moto_atualizado').val(moto_atualizado.toFixed(2));
// row.find('.caminhao_atualizado').val(caminhao_atualizado.toFixed(2));
 
arrayData.push({
carro,
moto,
caminhao,
distancia,
origem,
destino,
localidadeOrigem,
localidadeDestino,
removal_vehicle,
removal_motorcycle,
removal_tuck
});
}
 
$('#copy_data_table').val(JSON.stringify(arrayData));
}
 
});
});
 
//javascript para o formulario de cadastro
// $(document).ready(function (event) {
$('#uf').change(function () {
let code_city = $(this).val();
let deposit = localStorage.getItem('selected_deposit_id');
let action = route('removal.removal-values.cities', code_city);
$.ajax({
type: "POST",
url: action,
headers:
{
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data: { code_city: code_city },
 
success: function (data) {
 
$('#city').empty();
$('#deposit').empty();
 
for (let i = 0; i < data.cities.length; i++) {
$('#city').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '<option>');
}
 
if (data.deposits.length > 0) {
for (let i = 0; i < data.deposits.length; i++) {
$('#deposit').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '<option>');
}
} else {
// $('#deposit').prop('disabled', true);
// $('#city').prop('disabled', false);
}
 
$('#city').trigger('change');
}
});
 
});
 
$('#deposit').on('change', function () {
depositId = $(this).val();
localStorage.setItem('selected_deposit_id', depositId);
});
 
$('#uf_destiny').change(function () {
let code_city = $(this).val();
let depositDestiny = localStorage.getItem('selected_deposit_destiny_id');
let action = route('removal.removal-values.cities', code_city);
$.ajax({
type: "POST",
url: action,
headers:
{
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data: { code_city: code_city },
 
success: function (data) {
 
$('#city_destiny').empty();
$('#deposit_destiny').empty();
 
for (let i = 0; i < data.cities.length; i++) {
$('#city_destiny').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '</option>');
}
 
if (data.deposits.length > 0) {
// $('#deposit_destiny').prop('disabled', false);
//$('#city_destiny').empty();
// $('#city_destiny').prop('disabled', true);
for (let i = 0; i < data.deposits.length; i++) {
$('#deposit_destiny').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '</option>');
}
} else {
// $('#deposit_destiny').prop('disabled', true);
// $('#city_destiny').prop('disabled', false);
}
 
$('#city_destiny').trigger('change');
}
});
});
 
$('#deposit_destiny').on('change', function () {
let depositDestinyId = $(this).val();
localStorage.setItem('selected_deposit_destiny_id', depositDestinyId);
});
 
});

</code>

Share this post


Link to post
Share on other sites

Seu código está bastante extenso, tornando a análise um tanto complexa. Além disso, não identifiquei em nenhum ponto específico a execução de uma chamada POST que envie os dados atualizados através de data: {data: JSON.stringify(arrayData)}. É fundamental incluir essa chamada AJAX após a atualização dos dados para garantir que eles sejam enviados corretamente ao seu backend.

Exemplo:
 

$.ajax({
  type: "POST",
  url: "<URL_PARA_ENVIO_DOS_DADOS>",
  data: {data: JSON.stringify(arrayData)},
  success: function(response) {
    // Trate a resposta aqui
  },
  error: function(xhr, status, error) {
    // Trate erros aqui
  }
});


Usei um formatador online, para tentar pelo menos entender teu código, então faça um teste de evento de click:

Lembrando que tu é o pai da criança, só você e Deus sabe oque este código faz, só estou lhe dando um exemplo, não é solução final.

$(document).ready(function () {
  $('#apply_removal').on('click', function () {
    let percentage = $('#percentage').val(); // Coleta o percentual

    if (!percentage) {
      alert('Por favor, insira um percentual válido.');
      return;
    }

    let arrayData = []; // Inicializa o array

    $('.table-body tr').each(function () {
      let veiculo = $(this).find('.veiculo').text();
      let moto = $(this).find('.moto').text();
      let caminhao = $(this).find('.caminhao').text();
      
      let removal_vehicle = parseFloat(veiculo) * (1 + parseFloat(percentage) / 100);
      let removal_motorcycle = parseFloat(moto) * (1 + parseFloat(percentage) / 100);
      let removal_tuck = parseFloat(caminhao) * (1 + parseFloat(percentage) / 100);
      
      // Atualiza os campos na tabela
      $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2));
      $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2));
      $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));
      
      // Adiciona os dados atualizados ao array
      arrayData.push({
        removal_vehicle,
        removal_motorcycle,
        removal_tuck
      });
    });

    // Faz a chamada AJAX para enviar ao backend
    $.ajax({
      type: "POST",
      url: "<URL_PARA_ENVIO_DOS_DADOS>", // Substitua pela URL correta do seu backend
      data: JSON.stringify({data: arrayData}), // Certifique-se de que seu backend espera receber um JSON
      contentType: "application/json", // Informa ao servidor que o tipo de conteúdo é JSON
      success: function(response) {
        console.log('Dados enviados com sucesso!', response);
      },
      error: function(xhr, status, error) {
        console.error('Erro ao enviar dados:', error);
      }
    });
  });
});

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • By belann
      Olá!
       
      Estou usando o nextjs versão 15.2.3 e criei uma navbar que quando é carregado o programa aparece com a home, mas na hora de clicar na página produtos desaparece a navbar.
      A navbar esta sendo chamada no layout.tsx estou usando typescript
      e fica dessa forma
      <div>           <Navbar/>             <main>{children}</main>             </div>  
    • By violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • By violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.