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

Problema: Como deixar o código javascript mais elegante?

Estou desenvolvendo uma aplicação javascript que não ficou elegante.

Código HTML

 <div style="text-align: center;">
          <input type="button" id="plus" value='-' onclick="process1(-1)" />
          <input id="quant1" name="entry.1772499230" class="produto" size="1" type="text" value="0" maxlength="5" />
          <input type="button" id="minus" value='+' onclick="process1(1)">
 </div>

Na loja terá vários input id desse.

 <div style="text-align: center;">
          <input type="button" id="plus" value='-' onclick="process2(-1)" />
          <input id="quant2" name="entry.1772499230" class="produto" size="1" type="text" value="0" maxlength="5" />
          <input type="button" id="minus" value='+' onclick="process2(1)">
 </div>

Para exemplificar minha dúvida postei apenas 2 desses botões.

Os códigos javascript que interage com essas duas DIVs estão logo abaixo:

Script 1

<script>
function process1(quant1){
    var value = parseInt(document.getElementById("quant1").value);
    value+=quant1;
    if(value < 0){
      document.getElementById("quant1").value = 0;
    }else{
    document.getElementById("quant1").value = value;
    }
  }
</script>

Script 2

<script>
function process2(quant2){
    var value = parseInt(document.getElementById("quant2").value);
    value+=quant2;
    if(value < 0){
      document.getElementById("quant2").value = 0;
    }else{
    document.getElementById("quant2").value = value;
    }
  }
</script>

O problema é que pretendo criar na mesma página mais de 50 dessas DIVs e da forma que resolvi esse problema terei que criar mais de 50 desse script. Estou procurando uma forma de usar apenas um único código javascript e deixar meu código mais elegante.

1 resposta
solução!

Consegui resolver meu problema adaptando esse código:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
    $(document).on('click', '.box-right-delivery button', function () {
        var btn = $(this),
            oldValue = btn.closest('.box-right-delivery').find('input').val().trim(),
            newVal = 0;
        if (btn.attr('data-dir') == 'up') {
            newVal = parseInt(oldValue) + 1;
        } else {
            if (oldValue > 1) {
                newVal = parseInt(oldValue) - 1;
            } else {
                newVal = 0;
            }
        }
        btn.closest('.box-right-delivery').find('input').val(newVal);
        Calcular();
    });
</script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    crossorigin="anonymous"></script>

<div class="box-right-delivery">
    <button type="button" class="minus-button merge-top-left-button btn-circle" data-dir="dwn" id="dwn">
        <span class="glyphicon glyphicon-minus"></span>
    </button>
    <input type="text" class="form-control input-sm center merge-bottom-input" name="campo1" id="campo1"
        onchange="Calcular(this.value)" value="0">
    <button type="button" class="plus-button merge-top-right-button btn-circle" data-dir="up" id="up">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<div class="box-right-delivery">
    <button type="button" class="minus-button merge-top-left-button btn-circle" data-dir="dwn" id="dwn">
        <span class="glyphicon glyphicon-minus"></span>
    </button>
    <input type="text" class="form-control input-sm center merge-bottom-input" name="campo1" id="campo1"
        onchange="Calcular(this.value)" value="0">
    <button type="button" class="plus-button merge-top-right-button btn-circle" data-dir="up" id="up">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>