通过onsubmit属性提交表单时,HTML5模式验证无效

问题描述 投票:0回答:3

我试图通过onsubmit属性提交表单。但我希望HTML5验证能够正常工作。

function submitForm() {
  if(somecondition){
      //used this to submit form without it I was not able to submit the form
      $("form#form").submit();
      return true;
  }
  else{
      return false;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="search" method="post" id="form" onsubmit="return submitForm()">
  <input type="text" pattern="[A-Za-z]" required>
</form>

但即使没有给出任何价值,表格也会提交。一世

javascript jquery html5 forms html5-validation
3个回答
0
投票

输入的pattern属性是regexp,您可以手动提取它

const patternToMatch = $("input[type="text"]).attr("pattern");

然后用以下方法实现:

const regexp = new RegExp(patternToMatch);

最终确保输入尊重它提交

function submitForm() {
     if ($("input[type="text"]).val().match(regexp)) {
            form.submit();
     } else {
            // display message
     }
}

这是盲目编码,让我知道它是否工作:)


0
投票

当使用JQuery进行提交时,它不会查看HTML的验证,它会绕过它。但是有一种方法可以做到这一点,如下所示。所以我在这里做的是。首先要保持简单,而不是在加载页面时触发提交,我使用submitForm()函数创建了一个链接。我还创建了一个不可见的提交按钮。然后在submitForm()函数中,您可以找到隐藏按钮并触发单击事件,该事件将触发按钮的提交并验证您的HTML。

这样,您可以使用JQuery触发提交并编写JQuery中所需的任何其他代码。

编辑:更改了片段,以便在验证时仍然使用submit()JQuery函数。

function submitForm(){
        // do some stuff
        
        if ($('#form')[0].checkValidity()) {
                 $('#form').submit();
            }
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="search" method="post" id="form">
    <input type="text" id="warning" required>
    
    <a href="javascript: void(0);" onclick="submitForm()">Login</a>
</form>

0
投票

如果输入与模式不匹配,则以下代码不应调用“submit”

<form action="search" method="post" id="form">
  <input type="text" pattern="[A-Za-z]" required title="1 letter only">
</form>
var form = $("#form");

form.on("submit", function(e){
e.preventDefault();
   alert('Submitted')
});

在这里工作小提琴:https://jsfiddle.net/lightblue/94wj7cnb/1/

对于模式:

  • [a-zA-Z]以小写和大写形式匹配A-Z的一个字母。
  • [a-zA-Z]+匹配一个或多个字母(一个字)

在您的情况下,它只匹配1个字母

© www.soinside.com 2019 - 2024. All rights reserved.