【问题标题】:Prevent form submit but retain form validation阻止表单提交但保留表单验证
【发布时间】:2015-02-05 12:29:51
【问题描述】:

如何保留默认的 HTML 表单验证但禁止表单提交?我尝试过使用event.preventDefault()return false。两者都成功地阻止了表单提交,但都失败了表单验证。我也试过this solution,但还是不行。

有人能帮帮我吗?

【问题讨论】:

标签: javascript jquery forms validation


【解决方案1】:

event.preventDefault()return false; 如果在表单提交中使用,则两者都有效。 HTML 5 验证仍然存在。

jQuery("form").submit(function(e){
  e.preventDefault();  
  //or
  //return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" method="post">
  <input id="name" type="text" required="required" />
  <input id="email" type="email" required="required" />
  <input type="submit" id="btnSubmit" />
</form>

【讨论】:

  • 请注意,从 jQuery 事件返回 false调用隐式 event.stopProgagation()。对于非 jQuery 事件,它只会触发 event.preventDefault()。所以你给出的两种方法确实有不同的结果。请在此处查看:stackoverflow.com/questions/1357118/…
  • 您也可以只使用required,而不是使用required="required"。在我看来看起来更好。
  • preventDefault()不是有问题吗?修复任何表单验证错误后,再次按提交将不起作用?
【解决方案2】:

我使用checkValidity()reportValidity() 来解决这个问题。

假设您的表单的 id 为 FORM_ID

示例代码:

function handleSubmit (e) {
  e.preventDefault(); 
  var ele = document.getElementById("FORM_ID");
  var chk_status = ele.checkValidity();
  ele.reportValidity();
  if (chk_status) {
    ...
    // do your customized submit operations here.  
  }
}

reference

【讨论】:

  • 但这仍然会触发默认的 html5 验证消息弹出窗口吗?
  • 我投了反对票,因为checkValidityreportValiditypreventDefault 之后不炒锅。
猜你喜欢
  • 2018-01-05
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多