Search code examples
ajaxformsresetsubmit-button

AJAX form $('form')[0].reset(); on submit not clearing values. What am I missing?


thank you in advance for any help given. I'm just learning jQuery and AJAX and would appreciate some help with the following code. All validation rules work, the form submits and the page does not refresh. The problem is that the form values are not clearing/resetting to default after the submit has triggered. Thoughts?

**********EDITED to include HTML markup*************

        <div id="form">
            <h1 class="title">Contact Us</h1><!-- title ends -->
            <p class="contactUs">Ask about our services and request a quote today!</p><!-- contactUs ends -->

            <div id="success"><p>Your message was sent successfully.  Thank you.</p></div>

                <p id="required">* All fields required.</p>

                    <form name="form" id="contactMe" method="post" action="process.php" onSubmit="return validateForm()" enctype="multipart/form-data">
                        <input class="txt" type="text" maxlength="50" size="50" required name="name" value="<?php echo $_GET['name'];?>" placeholder="Name" />
                            <div id="nameError"><p>Your name is required.</p></div>
                        <input class="txt" type="text" maxlength="50" size="50" required name="email" value="<?php echo $_GET['email'];?>" placeholder="Email Address" />
                            <div id="emailError"><p>A valid email address is required.</p></div>
                        <textarea name="message" rows="6" cols="40" required placeholder="Message"></textarea>
                            <div id="messageError"><p>A message is required.</p></div>
                        <input type="hidden" maxlength="80" size="50" id="complete" name="complete" placeholder="Please Keep This Field Empty" />
                    <input type="submit" value="SUBMIT" name="submit" />
                <input type="reset" value="RESET" name="reset" />
        </form>
        </div><!-- form ends -->




//hide form submit success message by default.  to be shown on successfull ajax submission only. 
$(document).ready(function() {
    if ($('#success').is(':visible')){
        $(this).hide()
        }
});


//form validation
function validateForm() {

//name
var a=document.forms["form"]["name"].value;
if (a==null || a=="")
  {
      $('#nameError').fadeIn(250);
  return false;
  }

//email address
var c=document.forms["form"]["email"].value;
var atpos=c.indexOf("@");
var dotpos=c.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=c.length)
  {
      $('#emailError').fadeIn(250);
  return false;
  }

//message
var e=document.forms["form"]["message"].value;
if (e==null || e=="")
  {
      $('#messageError').fadeIn(250);
  return false;
  }
}//javascript form validation ends


//ajax submit and clear form on success
$(function () {


    $('form').on('submit', function (e) {

        var myForm = validateForm();                

        if (myForm == false){
            e.preventDefault();//stop submission for safari if fields empty
        }
        else{

          $.ajax({
            type: 'post',
            url: 'process.php',
            data: $('form').serialize(),
            success: function () {
                $('#success').fadeIn(250);
                if ($('#nameError, #emailError, #messageError').is(':visible')) {
                    $('#nameError, #emailError, #messageError').fadeOut(250);
                    }
                $('form')[0].reset();//clear form after submit success
            }//success ends
          });//ajax ends
        e.preventDefault();//prevent default page refresh
        }//else ends
        });//submit ends

});//function ends

//if reset button is clicked AND messages displayed, remove all form html messages
$(document).ready(function() {

    $('#form input[type="reset"]').click(function() {
        if ($('#success, #nameError, #emailError, #messageError').is(':visible')) {
            $('#success, #nameError, #emailError, #messageError').fadeOut(250);
        }
    });
    });

Solution

  • By giving your input id="reset" and/or name="reset", you effectively overwrote the form.reset method of the form because by doing so you made form.reset target the reset button. Simply give it a different id and name value.

    Never give elements name or id attributes that equal the name of a property of a dom node.