如何禁用特定输入字段的自动填充
Posted
技术标签:
【中文标题】如何禁用特定输入字段的自动填充【英文标题】:how to disable autofill for specific input field 【发布时间】:2018-06-25 17:54:49 【问题描述】:我正在使用输入字段通过 google api 获取邮政编码,我尝试使用 autocomplete="off" 停止自动填充,但仍然有以前的输入
<input onClick="this.select();" type="text" id="postal_code" name="postal_code" autocomplete="off" onFocus="geolocate()">
【问题讨论】:
这有帮助吗:***.com/questions/29432665/… 【参考方案1】:您在输入字段中使用autocomplete
属性。您应该在 <form>
标记中使用它来切换自动完成。
<form action="#" method="get" autocomplete="off">
First name:<input type="text" name="fname"><br>
</form>
<br>
<br>
<form action="#" method="get" autocomplete="on">
First name:<input type="text" name="fname"><br>
</form>
【讨论】:
它在几乎所有浏览器中都能正常工作。而且这个例子本身也很有效,不是吗? 如果表单中有多个输入字段,则自动完成功能将无法使用,但如果表单中的第二个输入将正常工作【参考方案2】:这是适用于所有浏览器的完美解决方案!
TL;DR
将您的输入字段名称和字段 ID 重命名为不相关的名称,例如 'data_input_field_1'
。然后将&#8204;
字符添加到标签中间。这是一个非打印字符,因此您不会看到它,但它会诱使浏览器不将该字段识别为需要自动完成的字段,因此不会显示内置的自动完成小部件!
细节
几乎所有浏览器都使用字段名称、ID、占位符和标签的组合来确定该字段是否属于可以从自动完成中受益的一组地址字段。因此,如果您有一个像<input type="text" id="address" name="street_address">
这样的字段,几乎所有浏览器都会将该字段解释为地址字段。因此,浏览器将显示其内置的自动完成小部件。梦想是使用属性autocomplete="off"
会起作用,不幸的是,现在大多数浏览器都不服从这个请求。
所以我们需要使用一些技巧来让浏览器不显示内置的自动完成小部件。我们将这样做的方法是欺骗浏览器,使其相信该字段根本不是地址字段。
首先将 id 和 name 属性重命名为不会泄露您正在处理与地址相关的数据的内容。所以不要使用<input type="text" id="city-input" name="city">
,而是使用类似的东西<input type="text" id="input-field-3" name="data_input_field_3">
。浏览器不知道 data_input_field_3 代表什么。但你知道。
如果可能,请不要使用 占位符文本,因为大多数浏览器也会考虑到这一点。如果您必须使用占位符文本,那么您必须发挥创意并确保您没有使用任何与地址参数本身相关的词语(例如City
)。使用 Enter location
之类的东西可以解决问题。
最后一个参数是附加到字段的标签。但是,如果您像我一样,您可能希望保持标签完好无损并向您的用户显示可识别的字段,例如“地址”、“城市”、“州”、“国家”。好吧,好消息:你可以!实现这一点的最佳方法是插入一个零宽度非连接字符&#8204;
作为标签中的第二个字符。所以用<label>C&#8204;ity</label>
替换<label>City</label>
。这是一个非打印字符,因此您的用户会看到 City
,但浏览器会被欺骗看到 C ity
而无法识别该字段!
任务完成!如果一切顺利,浏览器不应再在这些字段上显示内置地址自动完成小部件!
希望这对您的努力有所帮助!
【讨论】:
【参考方案3】:尝试将此添加到您的input
标签:autocomplete="__away"
Chrome 不知何故不遵循 autocomplete="off"
指令,因此我们必须使用此解决方法来执行未定义的值。
【讨论】:
以上是关于如何禁用特定输入字段的自动填充的主要内容,如果未能解决你的问题,请参考以下文章
如何防止浏览器列出输入字段的建议(不一定与禁用自动完成/自动填充相同)?