我在提交表单之前使用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”字段)。
处理这两种情况的最佳方法是什么?
onclick
作为忽略按钮方案,并在发送表单(https://stackoverflow.com/a/13951500/356726)之前删除该属性。但实际上我正在寻找更聪明的东西......
---编辑---
答案 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>