autocomplete="on"在上无效,浏览器仅识别的合法autocomplete值(如email、username),需语义化标注且表单必须成功提交才能触发自动填充。

autocomplete="on" 在 <form></form> 标签上基本没用——现代浏览器(Chrome ≥76、Edge、Safari)根本不认它来开启记忆功能。
为什么 autocomplete="on" 放在 <form></form> 上无效
浏览器只看每个 <input> 的 autocomplete 值,不继承 <form></form> 的设置。哪怕你写了 <form autocomplete="on"></form>,里面所有 <input> 没配具体语义值(比如 email、tel),浏览器就当它们是普通文本框,不会触发自动填充。
常见错误现象:
- 表单提交过多次邮箱,但刷新后
<input type="email">仍无下拉建议 - 用了
name="user_email"却没写autocomplete="email",浏览器记不住 - Chrome 显示“未保存此表单”,因为缺少标准
autocompletetoken
autocomplete 必须写在 <input> 上,且值要合法
真正起作用的是每个输入框自己的 autocomplete 属性,而且必须是 WHATWG 规范定义的关键词,不是随便起名。
正确写法示例:
<input type="email" name="email" autocomplete="email"><input type="text" name="username" autocomplete="username"><input type="password" name="password" autocomplete="current-password"><input type="password" name="new_password" autocomplete="new-password">
关键点:
-
autocomplete="email"比name="email"更重要——浏览器靠它匹配历史记录 -
autocomplete="mobile"或autocomplete="user-phone"是非法值,等同于off - 姓名字段推荐拆开:
autocomplete="given-name"和autocomplete="family-name",name整体值识别率低(尤其 Safari) - 地址字段必须层级完整:
autocomplete="address-level1"(省)、autocomplete="address-level2"(市),单写"city"无效
密码字段不配对,autocomplete="on" 就是摆设
Chrome 和 Edge 对密码字段有强干预:如果只有一个 type="password",且没明确标注是 current-password 或 new-password,浏览器会拒绝保存,也不显示填充建议。
必须满足两个条件才可能被记住:
- 类型必须是
type="password" - 必须配对出现:
autocomplete="current-password"(登录页已有密码) +autocomplete="new-password"(注册/改密页新密码)
单独写 autocomplete="off" 或 autocomplete="false" 对密码字段完全无效——这是浏览器主动忽略,不是 bug。
想让浏览器“记住”,重点不在开或关,而在“告诉它填的是什么”
所谓“开启记忆”,本质是帮浏览器精准归类字段语义。它不依赖开关,而依赖信号强度:
- 一个
<input autocomplete="email">比十个autocomplete="on"更管用 - 随机
name(如name="email_1714393482")会破坏历史匹配,反而让记忆失效 - 用
type="search"或type="tel"替代type="text"可能意外激活填充(因语义更明确) - localStorage 手动存取要避开 DOMContentLoaded 时机错位、value 类型错配、敏感字段误存等坑
最常被忽略的一点:浏览器只从**已成功提交过的表单**中提取值。没发出去的输入,再标准也不会进自动填充列表。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











