autocomplete="name"无效,因WHATWG规范未定义该值;必须用given-name或family-name才能触发浏览器自动填充,且需严格遵循大小写、连字符及语义规则。
autocomplete="name" 是无效写法,浏览器直接忽略——必须用 given-name 或 family-name 才能触发真实填充。
name 不行,而 given-name 可以WHATWG 规范里压根没有 name 这个 autocomplete 值。浏览器只认标准关键词,大小写、连字符、拼写全错一个就失效。比如:
autocomplete="name" → 被 Chrome/Safari/Firefox 全部跳过autocomplete="given-name" → 匹配用户保存的“名”,稳定触发autocomplete="family-name" → 匹配“姓”,常和 given-name 成对出现别凭经验写,直接查 WHATWG 官方列表。里面没有的,写了等于没写。
given-name 和 family-name 的实际使用场景这两个值不是“可选优化”,而是姓名类字段的强制语义标记。尤其在注册、收货地址、客服表单中,填错会导致整个姓名段被跳过或乱填。
立即学习“前端免费学习笔记(深入)”;
autocomplete="given-name" 框;应分两字段:given-name 填“张三”,family-name 填“丰”(中文场景下 family-name 通常指姓氏)given-name 出现在 family-name 之前,否则可能不识别given-name 字段推荐用 type="text",别用 type="search" 或动态改 type,会中断填充链autocomplete 值一旦和其他属性冲突,浏览器就会放弃该字段。以下组合在 Chrome 80+、Safari 15.4+、Firefox 90+ 中已确认失效:
autocomplete="given-name" + name="user_name" → Safari 直接无视,因 name 不规范autocomplete="given-name" + type="hidden" → 字段不可见,浏览器跳过autocomplete="given-name" + 动态渲染(如 Vue v-if 初始为 false)→ 首次加载无 DOM,填充不触发autocomplete="given-name" + 父级 form autocomplete="off" → 继承关闭,子项无法覆盖真正禁用单个字段,用 autocomplete="off";但如果是密码字段,优先用 autocomplete="new-password",更可靠。
iOS Safari 对 autocomplete 的校验最严,稍有偏差就放弃整组字段。实测关键点:
<label for="first">名</label><input id="first" autocomplete="given-name">,别用嵌套写法inputmode 冲突:给 given-name 加 inputmode="numeric" 会让键盘弹数字,但浏览器可能因此拒绝填充lang 属性匹配用户保存数据的语言版本,中文页确保 <html lang="zh-CN">
最易被忽略的是:autocomplete 值必须在页面首次渲染时就存在,JS 后续 patch 属性(如 el.setAttribute('autocomplete', 'given-name'))基本无效。