form的autocomplete属性基本无效,真正起作用的是input上符合WHATWG规范的语义化autocomplete值,如email、given-name、current-password等,拼写错误或非标准值均被忽略。

form 标签上的 autocomplete 属性基本没用——现代浏览器(Chrome 76+、Edge 90+、Firefox 90+)已将其视为“建议而非指令”,尤其在 HTTPS 页面中几乎被忽略。真正起作用的是每个 <input> 上的 autocomplete 值,且必须是 WHATWG 规范定义的语义化 token。
为什么 form autocomplete="off" 总是失效
它不是全局开关,只是给没显式设置 autocomplete 的子 <input> 提供默认值。一旦某个字段写了 autocomplete="email" 或 autocomplete="current-password",整个表单级设置就被覆盖。
- Chrome 对
type="password"或type="email"字段会主动绕过form autocomplete="off",强行尝试填充 - Edge 把它当“建议”,HTTPS 下基本不执行
- 即使写了
form autocomplete="off",只要存在<input type="password" autocomplete="current-password">,密码照样被填
<input> 上的 autocomplete 值怎么写才有效
必须用标准语义 token,拼错、大小写错、加连字符(如 auto-complete)、自定义值(如 myemail)全都被浏览器直接忽略。
-
email✅(phone、telephone❌) -
given-name✅(name❌,应拆成given-name+family-name) -
street-address✅(address、shipping-address❌) -
current-password✅(登录页),new-password✅(注册/改密页);password❌
示例:<input type="email" name="user_email" autocomplete="email">,<input type="password" name="pwd" autocomplete="new-password">
立即学习“前端免费学习笔记(深入)”;
动态渲染表单时 autocomplete 容易漏掉的点
浏览器只在 DOM 初始挂载时扫描 autocomplete,后续 JS 补充无效。
- 用
v-if或{show && <input>}插入字段,浏览器已错过识别时机 - 从登录页切到重置密码页,密码框的
autocomplete必须从current-password切换为new-password,否则 Chrome 可能把旧密码塞进新密码框 - SSR 输出的 HTML 必须包含完整
autocomplete属性,客户端 JS 补充无效 - 受控组件中若只写
value={state}却没配onChange,字段变只读,浏览器跳过填充;想保留自动填充,改用defaultValue
最麻烦的不是写不对,而是字段顺序和语义链断裂:比如 email 和 current-password 中间插了个 organization,浏览器可能直接放弃整组填充。



















