【问题标题】:AJAX form $('form')[0].reset(); on submit not clearing values. What am I missing?AJAX 表单 $('form')[0].reset();在提交不清除值。我错过了什么?
【发布时间】:2015-01-15 18:41:46
【问题描述】:

提前感谢您提供的任何帮助。我只是在学习 jQuery 和 AJAX,希望对以下代码有所帮助。所有验证规则都有效,表单提交并且页面不刷新。问题是表单值在提交触发后没有清除/重置为默认值。想法?

**********已编辑以包含 HTML 标记****************

        <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);
        }
    });
    });

【问题讨论】:

  • 你有id="reset"name="reset"的元素吗?页面上有多少个form 标签?
  • 是的@KevinB 我在标记中有 name="reset" 。我已经编辑了我的帖子并包含了 js 上方的所有表单标记。
  • 将其从重置更改为其他内容。
  • 永远不要将 name 或 id 属性值赋予与 submit、reset 或任何其他可以在 dom 元素上找到的方法名称相同的元素。
  • @KevinB 感谢您的帮助。我将标记中的重置按钮的名称更改为“clearForm”,并调整了我的 js 以匹配。一定是冲突,因为“reset”是js中的保留字。

标签: ajax forms reset submit-button


【解决方案1】:

通过输入id="reset" 和/或name="reset",您实际上覆盖了表单的form.reset 方法,因为这样做您使form.reset 定位到重置按钮。只需给它一个不同的 id 和 name 值。

永远不要给元素 name 或 id 属性与 dom 节点的属性名称相同。

【讨论】:

  • 成功了,谢谢!会投票赞成,但我的代表目前太低了。
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多