为什么没有HTML 5 doctype时会触发HTML 5验证?

3
我已经遇到这个问题几次了,非常令人恼火。在Dojo中,有一个必填属性来触发表单验证。HTML5现在也使用了同样的属性。问题在于,HTML5不关心required=的值是什么,required="anything"都表示必填。
因此,在我的表单元素上,如果我有required="false"来告诉Dojo我不想进行验证,在某些情况下,在Chrome和Firefox上,HTML5验证会运行该输入字段。
我尝试过使用HTML5 novalidate属性,但似乎如果存在required属性,则会忽略它。
我想我应该提一个问题。如何完全禁用HTML5验证?或者换句话说,为什么没有指定HTML5文档类型时会运行HTML5验证。
谢谢。
以下是问题的完整示例。请在Firefox或Chrome中打开。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/dojo/1.4.0/dojo/dojo.xd.js"></script>

  <script language="javascript" type="text/javascript">
    dojo.require("dojo.parser");
    dojo.require("dijit.form.Form");

    dojo.addOnLoad(function () {
      dojo.parser.parse();
    });
  </script>
  <form novalidate="novalidate" dojoType="dijit.form.Form">
  <select required="false" formnovalidate="formnovalidate">
    <option value="" >Please Choose A Category...</option>
    <option value="one" >One</option>
  </select>
  <button type="submit">Save</button>
  </form>
</body>
</html>
2个回答

5
为了回答你的第二个问题...
“为什么如果我没有指定HTML 5文档类型,HTML 5验证会运行?”
“HTML5 DOCTYPE”不是一种识别“HTML5文档”的方法。它只是最短的DOCTYPE,可以确保在浏览器中触发标准模式(这就是为什么在HTML5规范中选择它的原因)。
另外,“HTML5文档”这样的东西并不存在。该文档要么是以HTML编写的,要么不是。你可以说你的HTML文档包含了HTML5规范中首次定义的某些特性(我们可以称之为“HTML5特性”)。
浏览器不会对具有“HTML5 doctype”的HTML文档应用不同的规则。

这正确回答了主要问题,谢谢。次要问题似乎与Dojo有关,所以我在那里提交了一个错误报告。Dojo Bug Report - Dustin Butler

2

您可以通过在form标签中添加novalidate,或在任何单个的input中添加formnovalidate来禁用验证。


对我没用。我的表单标签如下。我看看能否发布一个小例子。 <form novalidate="novalidate" method="POST" name="form_new" id="form_new" dojoType="dijit.form.Form" enctype="multipart/form-data"> - Dustin Butler
请看问题中的示例HTML。在这种情况下,novalidate无效。这可能是Dojo的一个错误。 - Dustin Butler
@Dustin Dojo是你问题的原因。如果你移除 dojoType="dijit.form.Form",我就能正常工作了。请考虑提交一个错误报告 - Šime Vidas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接