提交时绕过HTML“required”属性

时间:2013-09-10 17:13:25

标签: javascript jquery html form-submit requiredfieldvalidator

我在提交表单之前使用required进行第一次检查。

<form action="myform.php">
  Foo: <input type="text" name="someField" required="required">
  <input type="submit" value="submit">
  <input type="submit" value="ignore">
</form>

问题是,我有一个“忽略”按钮,它也提交了表单,然后后端逻辑在数据库中设置了正确的状态。在这种情况下(忽略)不需要验证(因为不需要填写“Foo”字段)。

处理这两种情况的最佳方法是什么?

  1. 我知道我可以放弃“必需”并在其他地方进行验证(后端/ JavaScript)。我正在寻找一种方法来保持“必需”。
  2. 我可以使用一些J onclick作为忽略按钮方案,并在发送表单(https://stackoverflow.com/a/13951500/356726)之前删除该属性。
  3. 但实际上我正在寻找更聪明的东西......

    ---编辑---

    是的,重复Required attribute HTML5

4 个答案:

答案 0 :(得分:68)

没有JavaScript,不需要第二种形式,验证可以保留:

对于这个用例,HTML5规范设计了formnovalidate attribute提交元素(如<input type=submit>),作为attributes for form submission之一:

  

formnovalidate属性可用于制作不触发约束验证的提交按钮。

所以简单地说

<form action="myform.php">
  Foo: <input type="text" name="someField" required>
  <input type="submit" value="submit">
  <input type="submit" value="ignore" formnovalidate>
</form>

答案 1 :(得分:4)

你的#2是一种常见的方法。类似的东西:

$('input[value="ignore"]').click(function() {
    $(this).siblings('input[type="text"]').removeAttr('required');
});

可能必须使用mousedown来击败提交。

答案 2 :(得分:1)

如果您不想使用Javascript,可以将它们设为单独的表单,并将所有输入设置为隐藏ignore表单。

不是最佳选择,但它是另一种选择。

答案 3 :(得分:1)

您应该使用方法#1,理由如下:使用required代替JavaScript验证的主要原因是它更简单,即使禁用JavaScript也可以使用。这里的简单性不适用,因为使用required会使事情变得更加困难。后一个原因也不适用:禁用JavaScript且支持required的浏览器,除非在文本字段中输入一些数据,否则“忽略”按钮不起作用。

另一种选择是@ MattKenefick的回答中提到的那个。它甚至可能导致更简单的结构和逻辑。如果表单非常简单,可以直接将表单拆分为两种形式:

<form action="myform.php">
  Foo: <input type="text" name="someField" required="required">
  <input type="submit" value="submit">
</form>
<form action="myform.php">
  <input type="submit" value="ignore">
</form>