Function looping for no reason

1

I have a script to increment a value in a input of multiplication when + or - is pressed. It is working as expected since there is no focus in input of multiplication.

Every focus in input script gets looped when triggered (when keyboard shortcuts are tight). That is, if the value is "1" and press + the value becomes "2" as expected, but if focus in input multiplication and press + o value becomes "4" and not "3".

By using console.log I realized that it goes into a loop , going from "2" to "3" and repeating from "3" to "4".

//Adiciona ou Subtrai multiplicador com teclado
$("#valorBuscaProduto").focusin(function() {
  $(this).keydown(function(e) {

    //Caso '+' seja apertado
    if (e.keyCode == 187 || e.wich == 187) {
      e.preventDefault();

      var multiplicador = $("#inputMultiplicador").val().replace(",", ".");

      multiplicador = parseFloat(multiplicador);
      console.log(multiplicador);

      multiplicador = multiplicador + 1;
      console.log(multiplicador);

      $("#inputMultiplicador").val(multiplicador);

    }

    //Caso '-' seja apertado
    if (e.keyCode == 189 || e.wich == 189) {
      e.preventDefault();

      var multiplicador = $("#inputMultiplicador").val().replace(",", ".");

      multiplicador = parseFloat(multiplicador);
      console.log(multiplicador);

      if (multiplicador > 0) {
        multiplicador = multiplicador - 1;
        console.log(multiplicador);
      }

      $("#inputMultiplicador").val(multiplicador);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><formid="buscarProduto" class="barraPesquisa" method="post">
  <div id="multiplicador">
    <input id="inputMultiplicador" name="multiplicador" value="1">
  </div>
  <input type="search" id="valorBuscaProduto" name="valorBuscaProduto" placeholder="Buscar Produto">
  <input type="submit" name="submitBuscarProduto" value="Buscar">
</form>
    
asked by anonymous 06.09.2018 / 14:48

1 answer

0

Take out $(this).keydown(...) out of ("#valorBuscaProduto").focusin() , delete it and change this to "#valorBuscaProduto" , with only:

$("#valorBuscaProduto").keydown(...)

This is because you are, as you are now, each time you focus on #valorBuscaProduto , applying a new event handler keydown to this HTML element.

    
06.09.2018 / 15:08