【问题标题】:Remove the required attribute after the sucees of form submission表单提交成功后去掉required属性
【发布时间】:2019-09-12 13:08:30
【问题描述】:

我有一个点击提交的表单,如果输入框为空,则会用红色边框突出显示。现在我有 jquery ajax 表单提交,表单成功我将显示一条消息“数据提交”,我将重置表单,因此所有输入字段都将以红色突出显示。现在我想在表单提交成功后清空字段,它不应该以红色突出显示。

HTML

(function() {
  'use strict';
  window.addEventListener('load', function() {
    var form = document.getElementById('index-validation');
    form.addEventListener('submit', function(event) {
      if (form.checkValidity() === false) {
        event.preventDefault();
        event.stopPropagation();
      }
      form.classList.add('was-validated');
    }, false);
  }, false);
})();

$(".index-form").submit(function(e) {
  e.preventDefault();
  return false;
}
else {
  var ins_date = new Date($.now()).toLocaleString();
  var parms = {
    name: $("#name").val(),
    email: $("#email").val(),
    inserted_date: ins_date
  };
  var url2 = "http://localhost:3000/api";
  $.ajax({
    method: 'POST',
    url: url2 + "/homes",
    async: false,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(parms),
    success: function(data) {
      console.log('Submission was successful.');
      $(".alert-success").removeClass("d-none");
      $(".alert-success").fadeTo(2000, 500).slideUp(500, function() {
        $(".alert-success").slideUp(500);
      });
      $('.index-form')[0].reset();
      console.log(data);
    },
    error: function(data) {
      console.log('An error occurred.');
      console.log(data);
    },
  })
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="container index-form" id="index-validation" novalidate>
  <input class="form-control" type="text" id="name" name="name" placeholder="Your name" required>
  <input class="form-control" type="email" id="email" name="email" placeholder="Email Address" required>
  <div class="invalid-feedback">Please Enter a Valid Email Id.</div>
  <input type="submit" id="submit" class="btn btn-default btn-lg btn-block text-center" value="Send">
</form>

【问题讨论】:

  • async: false 不应该被使用
  • 在成功后加入这一行 promise $(".index-form")[0].reset();或 $(".index-form").find('input').prop('required',false);

标签: javascript jquery html ajax forms


【解决方案1】:

$(this.('.index-form').find("input[type=text]").val("");

您可以通过将 .val() 设置为空来清空表单值,您必须在 ajax 响应后将其打开。 并且也不要使用淡入和淡出,而是尝试使用隐藏和显示功能,两者的工作方式可能相同。

【讨论】:

  • 如果我清空表单,则输入以红色边框突出显示
  • 使用触发事件它可以帮助你
  • 试一试,在那个函数的最后只提一下return false可以停止那个高亮
【解决方案2】:

我不清楚您的问题,您是要重置表单还是删除错误类。但无论如何我都会尝试解决这两个问题:

脚本

    <script type="text/javascript">
                  (function() {
                  'use strict';
                  window.addEventListener('load', function() {
                    var form = document.getElementById('index-validation');
                    form.addEventListener('submit', function(event) {
                      if (form.checkValidity() === false) {
                        event.preventDefault();
                        event.stopPropagation();
                      }
                      form.classList.add('was-validated');
                    }, false);
                  }, false);
                })();

          $(".index-form").submit(function(e) {
                    e.preventDefault();
               return false;
            } else {
                    var ins_date=new Date($.now()).toLocaleString();
                 var parms = {
                 name : $("#name").val(),
                 email : $("#email").val(),
                 inserted_date:ins_date
                 };
                 var url2="http://localhost:3000/api";
                 $.ajax({
                 method: 'POST',
                 url: url2 + "/homes",
                 async: false,
                 dataType : "json",
                 contentType: "application/json; charset=utf-8",
                 data: JSON.stringify(parms),
                 success: function(data){
                 console.log('Submission was successful.');
    //if you are removing specific property from class
                $(".alert-success").css('display', 'none');
                  $(".alert-success").fadeTo(2000, 500).slideUp(500, function(){
                  $(".alert-success").slideUp(500);
                 });     
$("form")[0].reset(); 
                 console.log(data);
                 }, error: function (data) {
                    console.log('An error occurred.');
                    console.log(data);
                       },   
                    })
                 }
              });
              </script>

jquery不支持javascript的reset()等方法,所以可以触发javascript的reset()方法。

如果遇到问题,请随时提出疑问。编码快乐....!!!!!!

【讨论】:

  • 我试过了,还是不行。我的问题是表单提交成功后我需要显示成功消息并且表单应该重置
  • 成功消息来了吗??
  • 试试这个 $("form")[0].reset();这肯定会起作用,因为 Jquery 没有 reset() 函数。因此,不要按类选择元素,而是尝试选择节点
  • 然后尝试ChaN提供的解决方案,基本的,直接的,只需将输入框一一重置
猜你喜欢
  • 1970-01-01
  • 2017-11-17
  • 2014-11-26
  • 1970-01-01
  • 2023-03-16
  • 2017-08-13
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多