autocomplete是语义标签而非开关,必须严格小写、符合whatwg规范、置于内,且需上下文完整;密码填充须type+autocomplete+位置三要素齐备;动态创建input须在dom插入前设置属性;autocomplete="off"无效,应改用new-password等标准值。

autocomplete 不是开关,是语义标签;写错值、大小写偏差、脱离 <form></form>,浏览器直接跳过填充。
autocomplete 值必须严格小写且符合 WHATWG 规范
浏览器只认标准小写 token,比如 email、tel、given-name、shipping street-address。写成 Email、mobile、password(而非 current-password 或 new-password)全都会被忽略。
常见错误现象:
- 输入框聚焦后无任何下拉建议,控制台出现
[Autofill] Ignoring autocomplete value警告 - 用户本地有完整地址记录,但
autocomplete="address"无法触发填充(正确应为street-address+postal-code等组合)
实操建议:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 收货地址字段必须显式加
shipping前缀,例如shipping tel、shipping country - 省市区暂无强制标准值,可用
shipping address-level1(省)、shipping address-level2(市),但不要留空字段 - 避免拼写缩写:用
postal-code,不用zip或postcode
密码类 input 必须同时满足 type + autocomplete + 位置三要素
仅设 type="password" 或仅设 autocomplete="current-password" 都不够。Chrome、Safari、Edge 要求三者齐备才敢自动填充已保存的账号密码。
实操建议:
- 登录页密码框:用
<input type="password" autocomplete="current-password">,且最好紧邻autocomplete="username"或autocomplete="email"字段 - 注册/改密页新密码框:必须用
autocomplete="new-password",不能用off或password - 避免在两个密码框之间插入非标准字段(如
autocomplete="organization"),否则整组填充可能被放弃
动态插入的 input 必须在 DOM 插入前就设置 autocomplete
React/Vue 渲染、JS document.createElement('input')、SSR 后 hydration,都容易导致 autocomplete 属性晚于浏览器自动填充逻辑执行——此时补属性无效。
常见错误现象:
- 首屏无表单,点击后弹出登录框,输入框自动填了旧账号,但
autocomplete属性明明写了new-password - Vue
v-if切换后,input 出现但无填充提示
实操建议:
- 服务端直出 HTML 时就写好
autocomplete="new-password",别等 JS 挂载后再 setAttribute - 若必须动态创建,用
inputElement.setAttribute('autocomplete', 'new-password'),且确保在appendChild之前调用 - 不要依赖
focus或input事件后清空value来“防填充”——浏览器填充决策发生在 focus 前
想禁用自动填充?别信 autocomplete="off"
Chrome ≥76、Safari、Edge 基本无视 autocomplete="off",尤其对 type="password" 或 name="email" 这类强语义字段。
实操建议:
- 密码框统一用
autocomplete="new-password",这是 Chrome 明确认可的“不建议填充”信号 - 其他字段(如手机号、用户名)改用非标准字符串,例如
autocomplete="nope"或autocomplete="false"(注意是字符串,不是布尔值) - 配合非常规
name和type:不用name="email",改用name="user_email_input_872";不用type="email",改用type="text" - 不要给
<form></form>设autocomplete="off"—— 现代浏览器已弃用该行为,且会被子元素的autocomplete值覆盖
最常被忽略的一点:autocomplete 的生效高度依赖上下文完整性。哪怕一个字段值写对了,如果它孤零零出现在一堆无语义字段中间,或者被 CSS display: none 隐藏后又 show 出来,浏览器也可能直接放弃识别。这不是 bug,是设计使然——它本就不是为“强制填充”而生,而是为“精准匹配历史语义”服务的。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










