How to clear javascript validation error messages with the reset button

Viewed 1212

I have a simple form page, where there are several form validations. So far, the RESET button only clears the text field values. But I need the validation messages to clear when the RESET button is pressed. So far I have seen jQuery methods, but have no idea of implementing it as I am still learning.. Are there any other methods to do this without jQuery..? Any help would be highly appreciated.

Here's my code...

<!DOCTYPE html>
<html lang="en">

<head>
  <meta name="author" content="Koshila">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>Contact|Frittery</title>
  <link rel="stylesheet" href="about.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/css/bootstrap.min.css" integrity="sha384-VCmXjywReHh4PwowAiWNagnWcLhlEJLA5buUprzK8rxFgeH0kww/aWY76TfkUoSX" crossorigin="anonymous">

  <script>
    function validation() {
      var formFname = document.getElementById("fname").value;
      var formLname = document.getElementById("lname").value;
      var formEmail = document.getElementById("email").value;
      var formNumber = document.getElementById("pnumber").value;

      //Validate first name
      if (formFname.length == 0) {
        document.getElementById("fnameMessage").innerHTML = "<em>You did not enter your first name</em>"

      }


      //Validate last name
      if (formLname.length == 0) {
        document.getElementById("lnameMessage").innerHTML = "<em>You did not enter your last name</em>"

      }


      //Validate email
      if (formEmail.length == 0) {
        document.getElementById("emailMessage").innerHTML = "<em>You did not enter your email</em>"

      } else {
        var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
        if (regex.test(formEmail) === false) {
          document.getElementById("emailMessage").innerHTML = "<em>Please enter a valid email</em>"
        }
      }


      //Validate phone
      if (formNumber.length == 0) {
        document.getElementById("phoneMessage").innerHTML = "<em>You did not enter your phone number</em>"

      } else if (formNumber.length != 10) {
        document.getElementById("phoneMessage").innerHTML = "<em>Phone Number must be exactly 10 digits</em>"
        return false;
      } else
        return true;

    }
  </script>

</head>

<body>
  <div class="container">

    <h2>General Enquiry Form</h2>
    <form method="POST" action="#" onsubmit="validation(); return false;">
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="fname">First Name</label>
        <div class="col-sm-6">
          <input class="form-control" type="text" id="fname" name="fname">
        </div>
        <div class="col-sm-4">
          <span id="fnameMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="lname">Last Name</label>
        <div class="col-sm-6">
          <input class="form-control" type="text" id="lname" name="lname">
        </div>
        <div class="col-sm-4">
          <span id="lnameMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="email">Email</label>
        <div class="col-sm-6">
          <input class="form-control" type="email" id="email" name="email">
        </div>
        <div class="col-sm-4">
          <span id="emailMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="pnumber">Phone</label>
        <div class="col-sm-6">
          <input class="form-control" type="tel" id="pnumber" name="pnumber">
        </div>
        <div class="col-sm-4">
          <span id="phoneMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="message">Message</label>
        <div class="col-sm-10">
          <textarea class="form-control" id="message" name="message" style="height: 200px;"></textarea>
        </div>
      </div>
      <div class="form-group row">
        <div class="offset-sm-2 ">
          <button type="submit" class="btn btn-primary">Submit</button>
          <button type="reset" class="btn btn-secondary">Reset</button>
        </div>

      </div>
    </form>



  </div>
  <hr>
  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/js/bootstrap.min.js" integrity="sha384-XEerZL0cuoUbHE4nZReLT7nx9gQrQreJekYhJD9WNWhH8nEW+0c5qq7aIo2Wl30J" crossorigin="anonymous"></script>
</body>

</html>

5 Answers

Don't reset them manual by repeating code. Define a custom reset function which iterates over error messages and empty all of them:

function resetForm() {
  var elems = document.querySelectorAll(".text-danger");
  elems.forEach(itm => {
    document.getElementById(itm.id).innerHTML = ''
  })
}

Also don't put any script tag in your head tag. Read more here

Full code:

function resetForm() {
  var elems = document.querySelectorAll(".text-danger");
  elems.forEach(itm => {
    document.getElementById(itm.id).innerHTML = ''
  })
}


function validation() {
  var formFname = document.getElementById("fname").value;
  var formLname = document.getElementById("lname").value;
  var formEmail = document.getElementById("email").value;
  var formNumber = document.getElementById("pnumber").value;

  //Validate first name
  if (formFname.length == 0) {
    document.getElementById("fnameMessage").innerHTML = "<em>You did not enter your first name</em>"

  }


  //Validate last name
  if (formLname.length == 0) {
    document.getElementById("lnameMessage").innerHTML = "<em>You did not enter your last name</em>"

  }


  //Validate email
  if (formEmail.length == 0) {
    document.getElementById("emailMessage").innerHTML = "<em>You did not enter your email</em>"

  } else {
    var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    if (regex.test(formEmail) === false) {
      document.getElementById("emailMessage").innerHTML = "<em>Please enter a valid email</em>"
    }
  }


  //Validate phone
  if (formNumber.length == 0) {
    document.getElementById("phoneMessage").innerHTML = "<em>You did not enter your phone number</em>"

  } else if (formNumber.length != 10) {
    document.getElementById("phoneMessage").innerHTML = "<em>Phone Number must be exactly 10 digits</em>"
    return false;
  } else
    return true;

}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta name="author" content="Koshila">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>Contact|Frittery</title>
  <link rel="stylesheet" href="about.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/css/bootstrap.min.css" integrity="sha384-VCmXjywReHh4PwowAiWNagnWcLhlEJLA5buUprzK8rxFgeH0kww/aWY76TfkUoSX" crossorigin="anonymous">

</head>

<body>
  <div class="container">

    <h2>General Enquiry Form</h2>
    <form method="POST" action="#">
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="fname">First Name</label>
        <div class="col-sm-6">
          <input class="form-control" type="text" id="fname" name="fname">
        </div>
        <div class="col-sm-4">
          <span id="fnameMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="lname">Last Name</label>
        <div class="col-sm-6">
          <input class="form-control" type="text" id="lname" name="lname">
        </div>
        <div class="col-sm-4">
          <span id="lnameMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="email">Email</label>
        <div class="col-sm-6">
          <input class="form-control" type="email" id="email" name="email">
        </div>
        <div class="col-sm-4">
          <span id="emailMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="pnumber">Phone</label>
        <div class="col-sm-6">
          <input class="form-control" type="tel" id="pnumber" name="pnumber">
        </div>
        <div class="col-sm-4">
          <span id="phoneMessage" class="text-danger"></span>
        </div>
      </div>
      <div class="form-group row">
        <label class="col-form-label col-sm-2" for="message">Message</label>
        <div class="col-sm-10">
          <textarea class="form-control" id="message" name="message" style="height: 200px;"></textarea>
        </div>
      </div>
      <div class="form-group row">
        <div class="offset-sm-2 ">
          <button onclick="validation();  return false;" class="btn btn-primary">Submit</button>
          <button class="btn btn-secondary" onclick="resetForm();  return false;">Reset</button>
        </div>

      </div>
    </form>



  </div>
  <hr>
  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/js/bootstrap.min.js" integrity="sha384-XEerZL0cuoUbHE4nZReLT7nx9gQrQreJekYhJD9WNWhH8nEW+0c5qq7aIo2Wl30J" crossorigin="anonymous"></script>
</body>

<button type="reset" class="btn btn-secondary" onclick="clearErrors();">Reset</button>
function clearErrors() {
  document.getElementById("emailMessage").innerHTML = "";
  // ... repeat for other messages
}

As the error/validation messages are displayed within span elements of the same class text-danger you can easily query the DOM using querySelectorAll to return a nodelist and then iterate through that collection and set the span text content to an empty string.

Note that I added a name to the form and used that name within the anonymous function in the event handler. With a name assigned to the form also means that you can identify elements simply by doing something like this:

const form=document.forms.enquiry;
const formFname=form.fname;
const formLname=form.lname;

etc etc

document.querySelector('button[type="reset"]').addEventListener('click',e=>{
  e.preventDefault();
  document.querySelectorAll('.text-danger').forEach(span=>span.textContent='')
  document.forms.enquiry.reset()
})

function validation()
        {
            var formFname = document.getElementById("fname").value;
            var formLname = document.getElementById("lname").value;
            var formEmail = document.getElementById("email").value;
            var formNumber = document.getElementById("pnumber").value;

            //Validate first name
            if(formFname.length ==0)
            {
                document.getElementById("fnameMessage").innerHTML ="<em>You did not enter your first name</em>"
                
            }
           

            //Validate last name
            if(formLname.length ==0)
            {
                document.getElementById("lnameMessage").innerHTML ="<em>You did not enter your last name</em>"
                
            }
           

            //Validate email
            if(formEmail.length ==0)
            {
                document.getElementById("emailMessage").innerHTML ="<em>You did not enter your email</em>"
                
            }
            else
            {
                var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
                if(regex.test(formEmail)===false)
                {
                    document.getElementById("emailMessage").innerHTML ="<em>Please enter a valid email</em>"
                }
            }
            

            //Validate phone
            if(formNumber.length ==0)
            {
                document.getElementById("phoneMessage").innerHTML ="<em>You did not enter your phone number</em>"
                
            }
            else if(formNumber.length !=10)
            {
                document.getElementById("phoneMessage").innerHTML ="<em>Phone Number must be exactly 10 digits</em>"
                return false;
            }
            else
            return true;

        }
        
        
        
        
<div class="container">
  <h2>General Enquiry Form</h2>
  <form name='enquiry' method="POST" action="#" onsubmit="validation(); return false;">
      <div class="form-group row">
          <label class="col-form-label col-sm-2" for="fname">First Name</label>
          <div class="col-sm-6">
              <input class="form-control" type="text" id="fname" name="fname" >
          </div> 
          <div class="col-sm-4">
              <span id="fnameMessage" class="text-danger"></span>
          </div> 
      </div>
      <div class="form-group row">
          <label class="col-form-label col-sm-2" for="lname">Last Name</label>
          <div class="col-sm-6">
              <input class="form-control" type="text" id="lname" name="lname" >
          </div>  
          <div class="col-sm-4">
              <span id="lnameMessage" class="text-danger"></span>
          </div>
      </div>
      <div class="form-group row">
          <label class="col-form-label col-sm-2" for="email">Email</label>
          <div class="col-sm-6">
              <input class="form-control" type="email" id="email" name="email" >
          </div> 
          <div class="col-sm-4">
              <span id="emailMessage" class="text-danger"></span>
          </div> 
      </div>
      <div class="form-group row">
          <label class="col-form-label col-sm-2" for="pnumber">Phone</label>
          <div class="col-sm-6">
              <input class="form-control" type="tel" id="pnumber" name="pnumber">
          </div>  
          <div class="col-sm-4">
              <span id="phoneMessage" class="text-danger"></span>
          </div>
      </div>
      <div class="form-group row">
          <label class="col-form-label col-sm-2" for="message">Message</label>
          <div class="col-sm-10">
              <textarea class="form-control"  id="message" name="message" style="height: 200px;"></textarea>
          </div>
      </div>
      <div class="form-group row">
          <div class="offset-sm-2 ">
              <button type="submit" class="btn btn-primary">Submit</button>
              <button type="reset" class="btn btn-secondary">Reset</button>
          </div>

      </div>
  </form>



  </div>

You need to call the eraseText function separately like mentioned below

 function eraseText() {

  document.getElementById("fnameMessage").innerHTML = "";
  document.getElementById("lnameMessage").innerHTML = "";
  document.getElementById("emailMessage").innerHTML = "";
  document.getElementById("phoneMessage").innerHTML = "";
}
<button onClick="eraseText()" type="reset" class="btn btn- secondary">Reset</button>

take a look for my code

html code:

        <div class="tech-news__search__container">
            <div class="tech-news__search">
                <input 
                        id="subscribeInput"
                        type="text" 
                        class="tech-news__search-input"
                        placeholder="example@gmail.com"
                >
                <button class="tech-news__search-button" id="subscribeButton">Subscribe</button>
            </div>
            <div class="resultBlock">
                <p class="listOfSubscribers" id="listOfSubscribers"></p>
                <div id="result"></div>
                <div id="deleteAll"></div>
            </div>
        </div>

js code:

let node = null
let deleteAll
function renderItems() {
    const items = getItem()
    if (items.length) {
        const listOfSubscribers = document.getElementById('listOfSubscribers')
        listOfSubscribers.innerHTML = 'Subscribers'
        items.map(item => {
            node = document.createElement("LI");
            let textnode = document.createTextNode(item);  
            node.appendChild(textnode);   
            document.getElementById("result").appendChild(node);
        })
        deleteAll = document.getElementById('deleteAll')
        deleteAll.innerHTML = 'Delete All'
        deleteAll.addEventListener('click', deleteItems)
    }
}

renderItems()

function deleteItems() {
    sessionStorage.removeItem('subscribers')
    window.location.reload()
}
Related