我在我网站上输入的地址上使用 Google Places API:
<input type="text" name="street[]" id="street1" autocomplete="none" />
但是一旦加载了 Google Places,它就会将我的 autocomplete="none"替换为 autocomplete="off"。问题是谷歌浏览器与“关闭”值不兼容并继续显示自动填充建议。 有什么办法可以解决这个问题吗?
谢谢!
最佳答案
这是一个适用于所有浏览器的方法:
长话短说
将您的输入字段名称和字段 ID 重命名为不相关的名称,例如 'data_input_field_1'
.然后添加 ‌
字符到标签的中间。这是一个非打印字符,因此您不会看到它,但它会诱使浏览器不将该字段识别为需要自动完成的字段,因此不会显示内置的自动完成小部件!
详情
几乎所有浏览器都使用字段名称、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
的东西可以做到这一点。
最后一个参数是附加到字段的标签。但是,如果您像我一样,可能希望保持标签完整并向您的用户显示可识别的字段,如“地址”、“城市”、“州”、“国家/地区”。嗯,好消息:你可以!实现该目标的最佳方法是插入一个零宽度非连接字符 ‌
作为标签中的第二个字符。所以替换 <label>City</label>
与 <label>C‌ity</label>
.这是一个非打印字符,因此您的用户将看到 City
, 但浏览器将被欺骗以查看 C ity
而且不认识这个领域!
任务完成!如果一切顺利,浏览器应该不会再在这些字段上显示内置的地址自动完成小部件了!
希望这对您的努力有所帮助!
关于javascript - Google Places 覆盖自动完成关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57824711/