HTML5 表单属性

HTML5 给 <form><input> 增加了一大批属性,让"必填校验、格式限制、自动聚焦、跨表单提交"等能力不需要写一行 JS 就能实现。学习它们是写出规范、健壮表单的第一步。

form 上的新属性

autocomplete="on|off" 控制表单自动填充;novalidate 让提交时跳过校验

<form action="/submit" autocomplete="on">
    用户名:<input type="text" name="user"><br>
    <input type="submit" value="提交">
</form>

input 上的校验类属性

属性作用
required必填,为空无法提交
placeholder输入提示占位文字
pattern正则校验,如 pattern="[0-9]{11}"
min / max / step数字范围与步长
multiple允许 email/file 多值
autofocus页面加载即聚焦
<form>
    手机号:<input type="tel" name="phone" required
             pattern="[0-9]{11}" placeholder="11 位手机号"><br>
    <input type="submit" value="提交">
</form>

在浏览器中显示为:不填或格式不对时直接点提交,浏览器会提示"请填写此字段/请与所请求的格式保持一致",阻止提交。

摆脱表单的 form 属性

form 属性可以把 input 放到 <form> 外面,只要它的值等于表单的 id 就仍属于该表单并参与提交。

<form id="f1" action="/save">
    <input type="submit" value="提交">
</form>
<!-- 下面的输入框虽然在表单外,但仍属于 f1 -->
<input type="text" name="nickname" form="f1">

提交方式相关属性

formaction 覆盖 form 的 action,formmethod 覆盖 method(post/get),formenctype 覆盖编码,formnovalidate 让该按钮提交时跳过校验,formtarget 指定打开提交结果的窗口。

<form action="/save" method="get">
    <input type="submit" value="普通保存">
    <input type="submit" formaction="/save2"
           formmethod="post" value="另存为(post)">
</form>

autocomplete 细节与易错点

autocomplete 也可单独写在控件上:<input name="email" autocomplete="email">,浏览器能借此做智能填充(用户名、邮箱、地址等有标准取值)。

易错点:① required/pattern 只在提交时拦截,不是数据安全的保证,服务端必须二次校验;② pattern 用的是完整匹配的正则,想要部分匹配记得加 .*;③ min/max 对 date、number、range 生效,对普通文本框无效;④ autofocus 一个页面最好只用一次,以免干扰读屏用户。

小结:required/pattern/min/max 提供零 JS 的客户端校验,formaction/formmethod/form 属性让提交更灵活,服务端校验始终不可省略。

笔记加载中…