在HTML5中增加了许多新的功能,用于表单提交到服务器之前对表单进行数据的验证(抢了javascript的饭碗),有了这些功能,即便是javascript没有加载进来还是可以确保基本的验证。换句话说,浏览器自己会根据标记中的规则执行验证,然后自己显示适当的错误消息。当然,这些功能既然是来自HTML5 的,当然只能在支持HTML5这部分的内容的浏览器才有效,所以请我们看向未来的眼光来学习下面的这些个功能。
- 必填字段 在表单中指定required字段,凡是标注有required的字段在提交表单时值都不能为空。这个属性适用于<input>、<textarea>和<select>字段。(opera11及之前的版本还不支持<select>的required属性)。
<form action="post"> <label for="ele1">约束必填字段:</label><input id="eleOne" type="text" name="username" required> <button type="submit">submit</button> </form>
在chrome下有如下提示:
可以使用如下代码检测浏览器的支持性var isRequiredSuppored = "required" in document.createElement("input");
- 其他输入类型
HTML5为input元素的type属性又增加了几个值。这些新类型不仅能反映数据类型的信息,而且还能提供一些默认的验证功能,其中“email”和“url”是两个得到支持最多的类型,浏览器为他们提供了验证机制。
<form action="post"> <label for="ele2">其他输入类型:</label><br> <input type="email" name="email"><br> <input type="url" name="url"><br> <button type="submit">submit</button> </form>
在chrome有如下提示:
提示:浏览器只能简单验证其输入的格式并不能验证它的有效性。
可以用以下方式来检测浏览器是否支持var input = document.createElement("input"); input.type="email"; var isEmailedSuppored = (input.type = "email");
- 数值范围
HTML5还给type定义了其他属性“number”、“range”、“datatime”、“datatime-local”、“data”、“month”、“week”、“time”。对于这些数值类型的输入元素,可以指定min属性(最小的可能值)、max属性(最大的可能值)和step属性(从min到max的两个刻度间的差值)
<form action="post"> <label for="ele3">数值范围:</label><input type="number" min="0" max="10" step="2"><br> <button type="submit">submit</button> </form>
在不同的浏览器中可能会看到能够自动递增递减的按钮(如图),因浏览器而异。 - 输入模式
HTML5为文本新增了pattern属性。这个属性的值是一个正则表达式,用于匹配文本框中的值
<form action="post"> <label for="ele4">输入模式:</label><input type="text" pattern="d+" name="count"><br> <button type="submit">submit</button> </form>
注意:模式的开头和末尾不用加^和$符号(假定已经有了)。这两个符号表示输入的值必须从头到尾都与模式匹配。
使用以下代码可以检测浏览器是否支持pattern属性。var isPatternSuppored = "pattern" in document.createElement("input");
- 禁用验证
通过设置novalidate属性,可以告诉我们表单不进行验证。
<form method="post" action="XXX.php" novalidate> <!--这里插入表单元素-> </form>
如果一个表单中有多个提交按钮,为了指定点击某个提交按钮不必验证表单,可以在响应的按钮上添加formnovalidate属性。
<form method="post" action="XXX.php" novalidate> <!--这里插入表单元素-> <input type="submit" value="submit"> <input type="submit" value="NOsubmit" formvalidate> </form>