Calculate in reverse

0

Greetings, friends. I have a question about how I should implement this function. Currently she does me the percentage calculation well, but now I would like to put it to calculate the inverse.

Form

<div class="row">
    <div class="input-field col s12 m6">
        <input id="icon_prefix" class="black-text" type="text" name="cod_ticket" autocomplete="off" title="Disculpa, el n° de recibo debe contener nimino 5 digitos" pattern="[0-9]{4,10}" required/>
        <label for="cedula" class="black-text ">Cód Ticket:</label>
    </div>

    <div class="input-field col s12 m6">
        <select name="id_puntos" class="browser-default"  required/>
            <option value="" disabled selected>Punto:</option>
            <?php
                $consulta = $DB_con->query("SELECT * FROM puntos ORDER BY id_puntos");
                while ($linea = $consulta->fetch(PDO::FETCH_ASSOC)) { ?>
                    <option value="<?php echo $linea['id_puntos'] ;?>">
                        <?php echo $linea['puntos'] ;?>
                    </option>
            <?php
                }
            ?>
        </select>
    </div>
</div>

<div class="row">
    <div class="input-field col s12 m3">
        <input id="icon_prefix"  type="text" class="black-text" name="monto" autocomplete="off" title="Disculpa, seleccione una fecha" pattern="[0-9]{4,8}" required/>
        <label for="monto" class="black-text ">Monto Transferencia:</label>
    </div>

    <div class="input-field col s12 m3">
        <select name="porcentaje" class="browser-default" onblur="calcula_porcentajes(this.form)" required/>
            <option value="" disabled selected>Porcentaje:</option>
            <?php
                $consulta = $DB_con->query("SELECT * FROM porcentaje ORDER BY id_porcentaje");
                while ($linea = $consulta->fetch(PDO::FETCH_ASSOC)) { ?>
                    <option value="<?php echo $linea['porcentaje'] ;?>">
                        <?php echo $linea['porcentaje']; ?>%
                    </option>
            <?php
                }
            ?>
        </select>
    </div>

    <div class="input-field col s12 m3">
        <input id="icon_prefix"  type="text" class="black-text" name="ganancia"  readonly/>
        <label for="cedula" class="black-text ">Ganancia:</label>
    </div>

    <div class="input-field col s12 m3">
        <input id="icon_prefix"  type="text" class="black-text" name="total" autocomplete="off" required/>
        <label for="cedula" class="black-text ">Total:</label>
    </div>
</div>

normal function

<script language="javascript">
    function calcula_porcentajes (form) {
        var resultado;
        var resultado2;
        var x = 0;
        var y = 0;
        x = parseInt (form.monto.value);
        y = parseInt (form.porcentaje.value);

        resultado = x * y / 100;
        form.ganancia.value = resultado;

        resultado2 = x + resultado;
        form.total.value = resultado2;

    }
</script>

Reverse function

 <script language="javascript">
     function calcula_porcentajes_inverso(form){
       var resultado;
       var resultado2;
       var x=0;
       var y=0;
       x = parseInt (form.total.value);
       y = parseInt (form.porcentaje.value);


       resultado = x * y/100;
       form.ganancia.value=resultado;


       resultado2 = x - resultado;
       form.monto.value=resultado2;


    }
 </script>
    
asked by yoclens 16.07.2017 в 19:44
source

1 answer

1

After speaking through the chat now I understand what you want to do. What you wish is that your function calculates in a different way depending on the elements that have been filled. If only the monto field has been filled out, you must make a calculation and if only the total has been filled you must make another one.

This can be done by checking within your function which fields are full and which fields are not. Observe the following snippet:

document.querySelector("form input[name='porcentaje']").addEventListener("blur", calcula);

function calcula(evt) {

  var form = evt.currentTarget.form;
  var monto = form.monto.value;
  var porcentaje = form.porcentaje.value;
  var total = form.total.value;
  var resultado = 0;

  if (porcentaje.length === 0) { return; }
  if (monto.length === 0 && total.length === 0) { return; }
  porcentaje = parseInt(porcentaje);

  if (total.length === 0) {

    monto = parseInt(monto);
    resultado = monto * porcentaje / 100;
    form.total.value = Math.round(monto + resultado);

  } else {

    total = parseInt(total);
    resultado = (total * porcentaje) / 100;
    form.monto.value = Math.round(total - resultado);

  }

  form.ganancia.value = Math.round(resultado);

}
<form>
  <input type="text" name="monto" placeholder="monto" />
  <input type="text" name="porcentaje" placeholder="porcentaje" />
  <input type="text" name="ganancia" placeholder="ganancia" />
  <input type="text" name="total" placeholder="total" />
</form>
    
answered by 16.07.2017 / 19:59
source