Javascript does not pull results [closed]

0

Good afternoon guys, I'm trying to get it to calculate again using other field types, such as checkbox and list with some conditions, in some tutorials I tried to understand how it works, but I was not able to generate the result, if you can take a look and oriented thank you. >

<script type="text/javascript">
function calcular(oper){
    var tributacao = document.mensalidade.tributacao.value;
    var qt_func = document.mensalidade.qt_func.value;
    var fat_mes = document.mensalidade.fat_mes.value;
    var tipo_emp = document.mensalidade.tipo_emp.value;

    var qt_func2 = qt_func * 20;

    alert (qt_func2);

    var soma = parseInt(qt_func2) + parseFloat(tributacao) + parseInt(prestacao) + parseInt(industrial) + parseInt(comercial) ; 

    if (fat_mes <= 25000){
        var res = parseInt(0) + parseFloat(soma);
    } else (fat_mes > 25000 && fat_mes <= 30000){
        var res = parseFloat(soma) + 115;
    } else (fat_mes > 30000 && fat_mes <= 40000){
        var res = parseFloat(soma) + 150;
    } else (fat_mes > 40000 && fat_mes <= 50000){
        var res = parseFloat(soma) + 190;
    } else (fat_mes > 50000 && fat_mes <= 60000){
        var res = parseFloat(soma) + 230;
    } else (fat_mes > 60000 && fat_mes <= 70000){
        var res = parseFloat(soma) + 270;
    } else (fat_mes > 70000 && fat_mes <= 80000){
        var res = parseFloat(soma) + 310;
    } else (fat_mes > 80000 && fat_mes <= 90000){
        var res = parseFloat(soma) + 350;
    } else (fat_mes > 90000 && fat_mes <= 100000){
        var res = parseFloat(soma) + 390;
    } else (fat_mes > 100000 && fat_mes <= 110000){
        var res = parseFloat(soma) + 430;
    } else (fat_mes > 110000 && fat_mes <= 120000){
        var res = parseFloat(soma) + 470;
    } else (fat_mes > 120000){
        var res = (parseFloat(soma) * 0.40) / 100
    }

    document.mensalidade.res.value = res;
}
</script>

<form name="mensalidade" method="post" action="">
    <label>Tributação</label><br>
        <select id="tributacao" name="tributacao" class="form-control input">
            <option value="0">Escolha</option>
            <option value="49.90">MEI</option>
            <option value="219">Simples Nacional</option>
            <option value="319">Lucro Presumido</option>
            <option value="2650">Lucro Real</option>
        </select><br><br>
    <label>Quantidade de Funcionarios</label><br>
    <input type="text" name="qt_func" id="qt_func"><br><br>
    <label>Faturamento mes</label><br>
    <input type="text" name="fat_mes" id="fat_mes"><br><br>
    <label>Selecione os Tipos</label><br>
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="30">Serviços
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="150">Industrial
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="80">Comercial<br><br>
    <input type="text" name="res" id="res"><br><br>
    <input type="button" value="Calcular" onClick="calcular(document.mensalidade.fat_mes.value)"/>
</form>
    
asked by anonymous 15.02.2016 / 17:40

2 answers

2

You even started with the right foot, insulated the method to calculate in a function.

But I advise you not to declare inline events in HTML itself, preferably use HtmlElement.addEventListener(name, callback) .

Finally, although there are no problems using HTMLCollection to access the DOM elements of the page in your example, you may encounter some compatibility problem in the future, so I advise you to use document.getElementById .

//estou assumindo que você definiu estas variaveis em outro ponto do codigo.
var prestacao = 0;
var industrial = 0;
var comercial = 0;

var mensalidade = {};
mensalidade.form = document.querySelector("[name='mensalidade']");
mensalidade.tributacao = mensalidade.form.querySelector("[name='tributacao']");
mensalidade.qt_func = mensalidade.form.querySelector("[name='qt_func']");
mensalidade.fat_mes = mensalidade.form.querySelector("[name='fat_mes']");
mensalidade.tipo_emp = mensalidade.form.querySelectorAll("[name='tipo_emp']");
mensalidade.calcular = mensalidade.form.querySelector("[name='calcular']");
mensalidade.res = mensalidade.form.querySelector("[name='res']");
Object.defineProperty(mensalidade, "tipo_emp_sum", {
  get: function () {
    return [].reduce.call(mensalidade.tipo_emp, function (valor, tipo_emp, indice) {
      if (tipo_emp.checked)
        valor += parseInt(tipo_emp.value);
      return valor;
    }, 0);
  }
});


function calcular(event){
  var tributacao = parseFloat(mensalidade.tributacao.value) || 0;
  var qt_func = parseInt(mensalidade.qt_func.value) || 0;
  var fat_mes = parseInt(mensalidade.fat_mes.value) || 0;  
  var tipo_emp = mensalidade.tipo_emp_sum;
  var qt_func2 = qt_func * 20;

  var soma = qt_func2 + tributacao + tipo_emp + parseInt(prestacao) + parseInt(industrial) + parseInt(comercial) ; 
  var res = soma;
  switch(true) {
    case (fat_mes <= 25000): break;
    case (fat_mes <= 30000): res += 115; break;
    case (fat_mes <= 40000): res += 150; break;
    case (fat_mes <= 50000): res += 190; break;
    case (fat_mes <= 60000): res += 230; break;
    case (fat_mes <= 70000): res += 270; break;
    case (fat_mes <= 80000): res += 310; break;
    case (fat_mes <= 90000): res += 350; break;
    case (fat_mes <= 100000): res += 390; break;
    case (fat_mes <= 110000): res += 430; break;
    case (fat_mes <= 120000): res += 470; break;
    default: res = (res * 0.40) / 100; break;
  }
  mensalidade.res.value = res;
}

//adicionando os eventos aos inputs.
mensalidade.calcular.addEventListener("click", calcular);
mensalidade.tributacao.addEventListener("change", calcular);
mensalidade.qt_func.addEventListener("input", calcular);
mensalidade.fat_mes.addEventListener("input", calcular);
[].forEach.call(mensalidade.tipo_emp, function (tipo_emp, indice) {
  tipo_emp.addEventListener("change", calcular);
})
<form name="mensalidade" method="post" action="">
    <label>Tributação</label><br>
        <select id="tributacao" name="tributacao" class="form-control input">
            <option value="0">Escolha</option>
            <option value="49.90">MEI</option>
            <option value="219">Simples Nacional</option>
            <option value="319">Lucro Presumido</option>
            <option value="2650">Lucro Real</option>
        </select><br><br>
    <label>Quantidade de Funcionarios</label><br>
    <input type="text" name="qt_func" id="qt_func"><br><br>
    <label>Faturamento mes</label><br>
    <input type="text" name="fat_mes" id="fat_mes"><br><br>
    <label>Selecione os Tipos</label><br>
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="30">Serviços
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="150">Industrial
    <input type="checkbox" name="tipo_emp" id="tipo_emp" value="80">Comercial<br><br>
    <input type="text" name="res" id="res"><br><br>
    <input type="button" value="Calcular" name="calcular" "/>
</form>
    
15.02.2016 / 18:44
0

Okay, let's see if I can help you. The if 's are wrong, they have to stay as in this example below and start the variable res before entering the if ' s so you do not have to start it at all times.

var res =0;
if (fat_mes <= 25000){
     res = parseInt(0) + parseFloat(soma);
} else if (fat_mes > 25000 && fat_mes <= 30000){
     res = parseFloat(soma) + 115;
} else if (fat_mes > 30000 && fat_mes <= 40000){
     res = parseFloat(soma) + 150;
} else if (fat_mes > 40000 && fat_mes <= 50000){
     res = parseFloat(soma) + 190;
} else if (fat_mes > 50000 && fat_mes <= 60000){
     res = parseFloat(soma) + 230;
} else if (fat_mes > 60000 && fat_mes <= 70000){
     res = parseFloat(soma) + 270;
} else if (fat_mes > 70000 && fat_mes <= 80000){
     res = parseFloat(soma) + 310;
} else if (fat_mes > 80000 && fat_mes <= 90000){
     res = parseFloat(soma) + 350;
} else if (fat_mes > 90000 && fat_mes <= 100000){
     res = parseFloat(soma) + 390;
} else if (fat_mes > 100000 && fat_mes <= 110000){
     res = parseFloat(soma) + 430;
} else if (fat_mes > 110000 && fat_mes <= 120000){
     res = parseFloat(soma) + 470;
} else if (fat_mes > 120000){
     res = (parseFloat(soma) * 0.40) / 100
}

In doing so, the error will disappear, but it still has the variable prestacao that is not defined anywhere.

    
15.02.2016 / 18:34