Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

HTML Javascript simple validation form with maths function

I’m writing a simple inventory webpage with items used/issued to get subtracted from total stock and the should be in multiples of 50, All working fine except a small glitch.
The Javascript isn’t giving me balance, its adding the items fine in total variable, calculating and showing if its multiple of 50 or not. All Good.

BUT

just not giving me balance. What has gone wrong? I checked many time but to me all seems fine and in place. Help Please.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

function findTotal() {

  var stock = document.getElementsByName('stock');
  var arr = document.querySelectorAll('[name="vala"], [name="valb"], [name="valc"]'); //manual selection of names
  var tot = 0;

  for (var i = 0; i < arr.length; i++) {
    if (parseInt(arr[i].value))
      tot += parseInt(arr[i].value);
  }
  document.getElementById('total').value = tot;

  if ((tot % 50) == 0) {
    document.getElementById('new').value = "correct";
  } else {
    document.getElementById('new').value = "incorrect";
  }
  return tot;
  var bal = number(stock - tot);
  document.getElementById('balance').value = bal;
  return bal;
}

function ValidateTotal() {
  var y = findTotal();
  if ((y % 50) == 0) {
    return true;
  } else {
    alert("Total Must be in multiples of 50");
    return false;

  }
}
<form class="contact100-form validate-form" onsubmit="return ValidateTotal(this)" method="post" action="portal.php" class="simple-form">
  <span class="contact100-form-title">
                        Portal <br><span style="color:red;"><span style="font-size: 80%"> Data Submission for '.$datadate.' </red>
                    </span></span>
  </span>

  </div>
  <div class="wrap-input100 validate-input" data-validate="Value 1">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="vala" id="vala" placeholder="Value A">


  </div>
  <div class="wrap-input100 validate-input" data-validate="Value 2">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="valb" id="valb" placeholder="Value B">

  </div>


  <div class="wrap-input100 validate-input" data-validate="Value 3">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="valc" id="valc" placeholder="Value C">

  </div>

  <div class="wrap-input100 validate-input" data-validate="Value 4">
    <input class="input100" type="number" step="1" name="vald" id="vald" placeholder="Value D not in total">

  </div>
  <div class="wrap-input100 validate-input" data-validate="Total">
    <input class="input100" type="number" step="1" name="total" id="total" placeholder="Total ABC">

  </div>
  <div class="wrap-input100 validate-input" data-validate="stock">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="stock" id="stock" placeholder="Total Stock">

  </div>
  <div class="wrap-input100 validate-input" data-validate="balance">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="balance" id="balance" placeholder="balance">

  </div>


  <span style="color:red;">Total : 
<input type="text" name="total" id="total" size="2" readonly="readonly">Validations : 
<input type="text" name="new" id="new" size="5" readonly="readonly"></span></span>

  </div>

  <div class="container-contact100-form-btn">
    <button class="contact100-form-btn">
                            Submit
                        </button>
  </div>
</form>
</div>
</div>
</div>

>Solution :

you cant use getElementsByName because with getElementsByName it gives you nodelist.in that case you have specify the index:

getElementsByName("stock")[0].

i changed it to document.getElementById('stock').value; getting the value straight from here so you woulnt need to parseInt or .valueAsNumber.

var bal = stock - tot; this will work fine

function findTotal() {

  var stock = document.getElementById('stock').value;/*<-------byId*/
  var arr = document.querySelectorAll('[name="vala"], [name="valb"], [name="valc"]'); //manual selection of names
  var tot = 0;

  for (var i = 0; i < arr.length; i++) {
    if (parseInt(arr[i].value))
      tot += parseInt(arr[i].value);
  }
  document.getElementById('total').value = tot;

  if ((tot % 50) == 0) {
    document.getElementById('new').value = "correct";
  } else {
    document.getElementById('new').value = "incorrect";
  }
  
  var bal = stock - tot;
  document.getElementById('balance').value = bal;
  return bal;
  return tot;
}

function ValidateTotal() {
  var y = findTotal();
  if ((y % 50) == 0) {
    return true;
  } else {
    alert("Total Must be in multiples of 50");
    return false;

  }
}
<form class="contact100-form validate-form" onsubmit="return ValidateTotal(this)" method="post" action="portal.php" class="simple-form">
  <span class="contact100-form-title">
                        Portal <br><span style="color:red;"><span style="font-size: 80%"> Data Submission for '.$datadate.' </red>
                    </span></span>
  </span>

  </div>
  <div class="wrap-input100 validate-input" data-validate="Value 1">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="vala" id="vala" placeholder="Value A">


  </div>
  <div class="wrap-input100 validate-input" data-validate="Value 2">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="valb" id="valb" placeholder="Value B">

  </div>


  <div class="wrap-input100 validate-input" data-validate="Value 3">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="valc" id="valc" placeholder="Value C">

  </div>

  <div class="wrap-input100 validate-input" data-validate="Value 4">
    <input class="input100" type="number" step="1" name="vald" id="vald" placeholder="Value D not in total">

  </div>
  <div class="wrap-input100 validate-input" data-validate="Total">
    <input class="input100" type="number" step="1" name="total" id="total" placeholder="Total ABC">

  </div>
  <div class="wrap-input100 validate-input" data-validate="stock">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="stock" id="stock" placeholder="Total Stock">

  </div>
  <div class="wrap-input100 validate-input" data-validate="balance">
    <input class="input100" onblur="findTotal()" type="number" step="1" name="balance" id="balance" placeholder="balance">

  </div>


  <span style="color:red;">Total : 
<input type="text" name="total" id="total" size="2" readonly="readonly">Validations : 
<input type="text" name="new" id="new" size="5" readonly="readonly"></span></span>

  </div>

  <div class="container-contact100-form-btn">
    <button class="contact100-form-btn">
                            Submit
                        </button>
  </div>
</form>
</div>
</div>
</div>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading