input设置autocomplete="off"不生效,附相关代码求排查问题
问题原因
- 谷歌地图Places Autocomplete组件初始化时会覆盖输入框原生的
autocomplete属性设置,你手动加的autocomplete="off"会被组件修改,自然不会生效 - 现代主流浏览器(尤其是Chrome、Edge等基于Chromium的浏览器)针对地址、登录、支付类字段,默认会忽略
autocomplete="off"配置,强制弹出浏览器自带的历史输入补全 - 你同时给输入框绑定了
datalist和谷歌Places自动补全两个组件,二者的下拉提示逻辑冲突,也会导致原生的补全控制属性失效 - 当前输入框的
name属性为空值,部分浏览器识别字段类型时如果匹配到输入内容是地址相关,也会跳过autocomplete="off"的限制
解决方法
- 把
autocomplete属性值替换为new-password,这个值几乎所有现代浏览器都不会忽略,会明确告知浏览器不要弹出历史输入补全:
<input autocomplete="new-password" ... 其余属性保持不变>
- 在谷歌Places Autocomplete初始化完成后,手动再覆写一次输入框的
autocomplete属性,避免被组件覆盖:
var autocomplete_return = new google.maps.places.Autocomplete(return_field, { types: ["geocode"] }); // 新增下面这行 return_field.setAttribute('autocomplete', 'new-password');
- 如果不需要原生
datalist的下拉建议可以直接删除该节点,避免和谷歌地址补全冲突;如果需要保留可以给输入框新增autofill="off"属性做双重限制 - 给输入框的
name属性补充有效值,比如name="return_address",不要留空 - 极端场景下可以用只读属性规避浏览器自动补全检测:
<input type="text" readonly onfocus="this.removeAttribute('readonly')" ... 其余属性保持不变>
页面加载时输入框是只读状态,浏览器不会识别为可补全字段,用户点击输入时自动移除只读属性不影响正常输入。
内容的提问来源于stack exchange,提问作者Abid Riaz
相关产品推荐
相关产品推荐

