Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Soma do resultado de duas funções - JavaScript

Olá.

Eu tenho 4 checkbox, onde, o usuário pode marcá-los ou desmarcá-los. Criei uma função para eles, que vai pegar o value dos que estão marcados e somar e entregar o resultado A. E se o usuário desmarcar algum, vai subtrair o respectivo valor e devolver o resultado novo.

Além deste, tenho um input, onde o usuário vai preencher um número que é a quantidade. Criei uma função para isto também, para pegar a quantidade já quando o usuário digita, e faz a quantidade x value e devolve o resultado B.

Tudo ocorre em tempo real. Até aqui tudo funciona.

Ai eu quero ter uma nova função para somar e devolver na tela para o usuário o valor total, que é a soma entre A + B. Ou seja, ele não verá o valor de A e nem de B, separados. Apenas a soma de A+B. Porém esta última função não estou conseguindo fazer. Alguém pode me auxiliar?

Vou colocar o código aqui:

 var inputCapturada = document.getElementById("inputUser");
  inputCapturada.onchange = ValorDigitadoPeloUsuario;

  var inputs = document.getElementsByName("check[]");
  for(var i = 0; i < inputs.length; i++) {
    inputs[i].onchange = ValoresCheckbox;
  }  


  function ValorDigitadoPeloUsuario() {
    var valor = parseFloat("9.00");
    var valorTotal = parseFloat("0");

    valorTotal += (inputCapturada.value * valor).toFixed(2).toString().replace(".", ",");
  }



  function ValoresCheckbox(){
    var valorInicial = parseFloat("29.90");

    for(var i = 0; i < inputs.length; i++){
      if(inputs[i].checked){
        soma += parseFloat(inputs[i].value);
      }         
    }
}

O que eu quero fazer é basicamente somar o soma do ValoresCheckbox com valorTotal do ValorDigitadoPeloUsuario e entregar numa variável valorPagar.

1 resposta
solução!

Olá Graziela,

se eu entendi corretamente o seu raciocínio, o que você deseja fazer é:

  • Sempre que a entrada do usuário for alterada, ou um checkbox for marcado/desmarcado, verificamos quais checkboxes estão selecionados e somamos seus valores ao valor da entrada (Já processado).

Caso este seja o seu caso, podemos dar uma refatorada no seu código:

  var inputCapturada = document.getElementById("inputUser");
  inputCapturada.onchange = AtualizaValor();

  // Não sei se o "Name" do elemento realmente possui  "[]" 
  var inputs = document.getElementsByName("check");

  //No caso de mudança em algum dos checkboxes, tambem dispara a função
  inputs.onchange = AtualizaValor();


  //Alterei o nome da função para facilitar a legibilidade do código
  function AtualizaValor() {
      //Testamos para ver se o usuário digitou algo. Caso contrário, não há motivos para somar nada.
      if(inputCapturada.lenght > 0){
          //Criamos uma variável local para armazenar a soma dos valores selecionados 
          var somaCheckboxes = ValoresCheckbox(inputs);  

          var valor = parseFloat("9.00");
          var valorTotal = parseFloat("0");

          valorTotal += (inputCapturada.value * valor).toFixed(2).toString().replace(".", ",");

          //Somamos agora o valor dos checkboxes ao valorTotal
          valorTotal += somaCheckboxes ;
      }
  }

  function ValoresCheckbox(inputs){
      //Não ficou muito clara a utilização desta variável
      //var valorInicial = parseFloat("29.90");

     var somaTotal = 0;

      for (var i=0; i<inputs.length; i++) {
          // Para cada um que estiver selecionado...
          if (inputs[i].checked) {
              somaTotal += parseFloat(inputs[i].value);
          }
      }  

       return somaTotal;
  }

Espero ter te ajudado com o seu problema. Caso tenha ficado alguma dúvida ficarei feliz em tentar sana-la.

Grande abraço!