Jquery is adding the wrong values

Asked

Viewed 65 times

-2

Hello, when I select a treatment he has to take the amount in R$ and add, to in the end give a total, but if I select a wrong option and have to select another he is adding it, but should not, because give error in the sum of the tax.

      $(document).on('changed.bs.select', 'select.orcamento_tratameno', function(e, clickedIndex, newValue, oldValue)
  {
    e.preventDefault();
    var text = $('option:selected', this).text();
    var value = $('option:selected', this).val();
    var valor = parseInt($('option:selected', this).attr('valor'));

    if(text != '' && value != '' && valor != '')
    {   
      if(newValue === true)
      {
        $('.orcamento_id_tratamento:last').val(value);
        $('.orcamento_tratamento_valor:last').val(valor);
        valorTratamento = (valorTratamento + valor);
        somaValores(valorTratamento);
      }
    }
  });     

});

function somaValores(valor)
{
  $('#subtotal').html('R$ '+formatReal(valor));
  $('#total').html('R$ '+formatReal(valor));
}

var valorTratamento = 0;

Foto Tratamentos vis Dinamic

/*ORÇAMENTOS------------------------------------------------------------------------------*/
var html_novo_tratamento = '';
html_novo_tratamento +=' <div class="row align-items-center mt-3 dinamic">';
html_novo_tratamento +=' <div class="col-md-3 mt-3">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <label  class="bmd-label-static">Plano</label>';
html_novo_tratamento +=' <select class="selectpicker orcamento_plano" data-live-search="true" data-width="100%" name="orcamento_plano[]" data-style="select-with-transition"  title="Plano" data-size="8" tabindex="-98">';
html_novo_tratamento +=' </select>';
html_novo_tratamento +=' <input type="hidden" class="orcamento_id_plano">';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' <div class="col-md-3 mt-3">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <label class="bmd-label-static">Tratamento</label>';
html_novo_tratamento +=' <select class="selectpicker orcamento_tratameno" data-live-search="true" data-width="100%" name="orcamento_tratameno[]" data-style="select-with-transition"  title="Tratamento" data-size="8" tabindex="-98">';
html_novo_tratamento +=' </select>';        
html_novo_tratamento +=' <input type="hidden" class="orcamento_id_tratamento"> ';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' <div class="col-md-2 mt-3">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <label  class="bmd-label-static">Dentes/Região</label>';
html_novo_tratamento +=' <select class="selectpicker orcamento_tratamento_dente"  data-live-search="true" data-width="100%" name="orcamento_tratamento_dente[]" data-style="select-with-transition"  title="Dentes/Região" data-size="8" tabindex="-98"></select>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' <div class="col-md-2 mt-3">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <label class="bmd-label-static">Valor</label>';
html_novo_tratamento +=' <input type="text" class="form-control orcamento_tratamento_valor" name="orcamento_tratamento_valor[]" required="true" aria-required="true" aria-invalid="true">';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' <div class="col-md-2 mt-3 text-right">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <div class="div-actions" style="display: block; margin-left: 1em;">';
html_novo_tratamento +=' <a href="#" rel="tooltip" class="btn btn-dark btn-link remove">';
html_novo_tratamento +=' <i class="material-icons" style="font-size: 2em">delete</i>';
html_novo_tratamento +=' </a>';                                                           
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' <div class="col-md-5 mt-3">';
html_novo_tratamento +=' <div class="form-group bmd-form-group">';
html_novo_tratamento +=' <label  class="bmd-label-static">Dentista</label>';
html_novo_tratamento +=' <input type="text" class="form-control" name="orcamento_dentista[]" required="true" aria-required="true" aria-invalid="true">';
html_novo_tratamento +=' </div>';
html_novo_tratamento +=' </div>';                        
html_novo_tratamento +=' </div>';

$('.btn-novo-tratamento').on('click', function()
{ 
  $('.novo_tratamento').append(html_novo_tratamento);
  getAllPlanos(); // usado para popular os planos apos a adição da div 
  getTratamentoById(paciente_plano); // usado para popular os tratamentosapos a adição da div 
  getDentes(); // usado para popular os dentes/região apos a adição da div 
  $('.dropdown-menu .inner').perfectScrollbar();
});

$(document).on('click', '.remove', function()
{
  $(this).parents('div.dinamic').remove();
});
  • Can someone help me?

  • I posted a solution for you, I hope it helps. Give me the feedback whether it worked or not.

1 answer

1


This is happening because you are assigning the sum total to the base value of the treatment, which is the parameter used for the sum, that is, to each interaction with this value the same will be changed.

if(newValue === true) {
    $('.orcamento_id_tratamento:last').val(value);
    $('.orcamento_tratamento_valor:last').val(valor);
    const total = valorTratamento + valor;
    somaValores(total);
}

EDIT

To add the inputs that are added dynamically you can use the following code:

if(newValue === true) {
    $('.orcamento_id_tratamento:last').val(value);

    const $valores = $('.orcamento_tratamento_valor');
    $valores.last().val(valor); //Adicionar o valor no último input criado
    let total = 0;

    //Iterar cada input contido na coleção e somar cada valor encontrado
    $($valores).each(function (index, element) {
        total += parseFloat($(element).val());
    });

    somaValores(total);
}
  • At first it worked, but when I add the dynamic Divs it only takes the last value. I don’t know if it’s clear.

  • I’ll add a photo for you to base on.

  • added a photo for you to see.

  • If in the first div I put tests in the treatment, however I was wrong and need to change, it keeps the value and adds to the other, but could not

  • It’s gone from the codes I have :(

  • Take a look at the update I made @Joséluis

Show 1 more comment

Browser other questions tagged

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