1

I've got a very simple form and I'm want the values to empty when I submit in order to use again without refreshing the page. What I've got isn't working for some reason. My initial idea was to set the values of the inputs to empty strings on form submit, but when I log them into the console they don't do that. Anyone know what I'm doing wrong here?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <form id="form">
      <input id="volume" type="text" />
      <input id="denied" type="text" />
      <input id="charges" type="number" step="any" />
      <button id="submit" type="btn-submit">Submit</button>
    </form>

    <div class="results">
      <p class="rate">Current Denial Rate: </p>
      <p class="recoverable">Recoverable Dollars: </p>
    </div>
    <script src="script.js"></script>
  </body>
</html>

let form = document.getElementById("form");
let volume = document.getElementById("volume");
let denied = document.getElementById("denied");
let charges = document.getElementById("charges");
let submit = document.getElementById("btn-submit");
let results = document.querySelector(".results");
let rate = document.querySelector(".rate");
let recoverable = document.querySelector(".recoverable");

form.onsubmit = function (e) {
  e.preventDefault();
  volume = volume.value;
  denied = denied.value;
  charges = charges.value;

  let curDenialRate = parseFloat((denied / volume) * 100);
  charges = parseFloat(charges * 0.4);

  function formatNumber(num) {
    let formattedNum = num.toFixed(2);
    return formattedNum;
  }

  let recoverableDollars = "$" + formatNumber(charges);
  curDenialRate = formatNumber(curDenialRate) + "%";

  rate.append(curDenialRate);
  recoverable.append(recoverableDollars);

  volume = " ";
  denied = " ";
  charges = " ";

  return false;
};
0

2 Answers 2

1

Use HTMLFormElement.reset():

let form = document.getElementById("form");
const volume = document.getElementById("volume");
const denied = document.getElementById("denied");
const charges = document.getElementById("charges");
let submit = document.getElementById("btn-submit");
let results = document.querySelector(".results");
let rate = document.querySelector(".rate");
let recoverable = document.querySelector(".recoverable");

form.onsubmit = function(e) {
  e.preventDefault();
  let a = volume.value;
  let b = denied.value;
  let c = charges.value;
  let curDenialRate = parseFloat((b / a) * 100);
  c = parseFloat(c * 0.4);

  function formatNumber(num) {
    let formattedNum = num.toFixed(2);
    return formattedNum;
  }

  let recoverableDollars = "$" + formatNumber(c);
  curDenialRate = formatNumber(curDenialRate) + "%";

  rate.append(curDenialRate);
  recoverable.append(recoverableDollars);

  form.reset();
  return false;
};
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
</head>

<body>
  <form id="form">
    <input id="volume" type="text" />
    <input id="denied" type="text" />
    <input id="charges" type="number" step="any" />
    <button id="submit" type="btn-submit">Submit</button>
  </form>

  <div class="results">
    <p class="rate">Current Denial Rate: </p>
    <p class="recoverable">Recoverable Dollars: </p>
  </div>
  <script src="script.js"></script>
</body>

</html>

Sign up to request clarification or add additional context in comments.

4 Comments

This is perfect! Thank you! If I may ask a followup question, when I use the forms a second time, my results are NaN. If this because of the preventdefault()?
@RRhodes Yes, there's an issue. Inside the form, you set volume = volume.value; which means after submitting once volume is a number, so volume.value returns undefined. Just refactor the variable name. This is more obvious when you make volume a constant.
@RRhodes I've updated the answer and refactored the variable names. It should work now.
Awesome! Thanks so much.
0

How you are clearing values will not work. You are trying to change the variable but that will not affect the DOM element or its value.

You will have to use the below code with value property to change the value.

 document.getElementById("volume").value= " ";
 document.getElementById("denied").value= " ";
 document.getElementById("charges").value= " ";

2 Comments

Sorry I was wrong, he modified and re-asiegnd it at start... volume = volume.value; etc..
Haha, once again I missed that. This has been a rollercoaster.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.