如何禁用指定表单字段自动完成?autocomplete:false设置无效求助
解决表单国家字段autocomplete设置不生效的问题
嘿,我来帮你搞定这个问题!你遇到的情况其实挺常见的——浏览器现在对autocomplete属性的处理变得更“聪明”了,尤其是针对地址类的字段,普通的autocomplete: 'false'根本拦不住它。
首先得指出你代码里的一个小问题:HTML规范里autocomplete属性的合法值是"on"或者"off",还有一些预定义的字段标识(比如"country-name"这类),"false"并不是标准值,所以很多浏览器会直接忽略这个设置,这就是为什么你的国家字段还是会自动填充。
接下来给你几个靠谱的解决方案,按优先级来:
方案1:改用标准的autocomplete: 'off'
先把属性值改成标准的'off',这是最基础的修正,有些浏览器可能就乖乖听话了:
.country.booking-field = passenger.select :country, Country.all.pluck(:name), {prompt: t('booking.country')}, autocomplete: 'off', class: "country tt-input select-beast"
方案2:用浏览器无法识别的自定义值
如果'off'还是不生效(比如Chrome,它对地址类字段会强制触发自动填充),可以试试用一个浏览器完全不认识的autocomplete值,比如'nope'或者'custom-country',这样浏览器找不到对应的填充规则,就不会乱填了:
.country.booking-field = passenger.select :country, Country.all.pluck(:name), {prompt: t('booking.country')}, autocomplete: 'nope', class: "country tt-input select-beast"
方案3:结合readonly + JavaScript的“小 trick”
如果上面两种都不管用,还有个屡试不爽的方法:先给字段加上readonly属性(浏览器不会填充只读字段),然后在页面加载完成后用JS移除这个属性,让用户可以正常选择:
Ruby代码修改:
.country.booking-field = passenger.select :country, Country.all.pluck(:name), {prompt: t('booking.country')}, autocomplete: 'off', readonly: true, class: "country tt-input select-beast"
配套JavaScript(原生JS版本):
document.addEventListener('DOMContentLoaded', function() { const countrySelect = document.querySelector('.country.booking-field'); if (countrySelect) { countrySelect.removeAttribute('readonly'); } });
为什么这些方法有用?因为现在的浏览器会根据字段的名称(比如你的字段叫country)、类型甚至页面上下文来判断是否属于地址、联系方式这类需要自动填充的字段,哪怕你设置了off,它也可能“自作主张”。用自定义值或者readonly的小技巧,就能绕过浏览器的自动填充逻辑啦。
内容的提问来源于stack exchange,提问作者software developer
相关产品推荐
相关产品推荐

