最近我碰到了几次这个问题,Chrome忽略autocomplete="false"
和autocomplete="off"
。如果之前有人提交带有随机“hack”的表单,它甚至会忽略autocomplete="whatever"
或任何你用来欺骗它的东西。
在试图解决这个问题时,我遇到了此StackOverflow问题,但如果之前已经提交过包含该字段的表单,则无法解决该问题。
编辑:这不是针对密码字段的。
最近我碰到了几次这个问题,Chrome忽略autocomplete="false"
和autocomplete="off"
。如果之前有人提交带有随机“hack”的表单,它甚至会忽略autocomplete="whatever"
或任何你用来欺骗它的东西。
在试图解决这个问题时,我遇到了此StackOverflow问题,但如果之前已经提交过包含该字段的表单,则无法解决该问题。
编辑:这不是针对密码字段的。
我在一个字段名称中带有“number”这个词的问题上遇到了困难,导致信用卡自动填写对话框被触发。这个解决方案帮助我摆脱了这个问题。
尽管这不是选项的预期使用方式,但我认为这不太可能出现故障,并且可以在没有JavaScript Hack的情况下工作。一次性代码不会触发自动填充,所以我将不希望自动填充的字段视为一次性代码。
<input type="text" name="number" autocomplete="one-time-code" />
这对我起了作用。我在Chrome 87.0.4280.141中测试过,它运行良好。
对于我而言,autocomplete="new-password"并设置placeholder属性为一些文本就可以了。
<input name="name1" placeholder="Nº" type="text" autocomplete="new-password" />
每当我找到一个解决方案时,Chrome又会再次扰乱我的计划。
不再起作用
autocomplete="new-*"
<form>
元素之前添加一个屏幕外定位的虚假输入元素style="position: fixed;top:-100px;left:-100px;"
<form autocomplete="off">
textarea>
并将其样式设置为字段解决方案(2021年7月15日)
附加一个没有name
属性的虚拟<input>
并将原始<input>
类型设置为“hidden”
HTML
<input type="hidden" name="myfield" class="no-autofill"> <input>
click
,blur
,focus
),这些事件可以显示您的自定义自动填充应添加到可见的 <input>
元素中。
然后添加一个 change
事件将值同步到隐藏的输入框中。const fields = document.querySelectorAll('input.no-autofill');
for (const field of fields) {
const dummy = field.nextElementSibling;
dummy.addEventListener('change',e => {
field.value = e.target.value;
});
}
在实施之前,请确保访问Chromium bug跟踪器,并告诉Chrome开发人员遵循标准的重要性。这样,总有一天我们可以直接使用:
<input name="myfield" autocomplete="off">
它在我的本地机器上运行良好,请尝试...
<input type="email" class="form-control" id="email" name="email" placeholder="Enter Email" readonly onfocus="this.removeAttribute('readonly');" style="background-color: white;">
Addres‍s
。
html, body {
font-family: 'Helvetica', Sans-Serif;
font-weight: 200;
line-height: 1.5em;
padding: 1em;
}
<div class="addressDiv">
<div>
<label>Focus on this field...Address</label>
<div>
<input autocomplete="off" type="text" aria-autocomplete="none" autocapitalize="none" />
</div>
</div>
<div>
<label>State</label>
<div>
<input autocomplete="address-level1" type="text" value="">
</div>
</div>
<div>
<label>City</label>
<div>
<input autocomplete="address-level2" type="text" value="">
</div>
</div>
</div>
<p>
See <a href="https://jsfiddle.net/f490h2s6/">this JSFiddle</a>
</p>
简洁明了的答案,只需编辑“selectorForYourInputs”,就可以很好地运行,经过跨浏览器测试,最大开销为50ms,用户从未注意到任何性能滞后:
counter = 0;
emptySearchboxInterval = setInterval(() => {
$(selectorForYourInputs).val("");
counter++;
counter == 100 ? clearInterval(emptySearchboxInterval) : null;
}, 20);
autocomplete ='chrome-off'
如果您可以做到,为了防止自动建议弹出窗口:排除name
和id
属性。autocomplete
字段时出现。如果我将该值设置为随机数(Math.random()
),则不会发生自动完成。我认为也可以使用一个唯一的字符串。在使用该方法前,请阅读底部的注意事项
经过长时间的努力,我通过以下方式成功地使它可靠运行:
重要的是,您的输入类型必须为“文本”!
定义一个CSS类
注意事项:请勿删除HTML标签。input.hidden-password {
-webkit-text-security: disc;
}
然后在您的表单中,将自动完成关闭,输入类型设置为“文本”,并将类添加到输入框中。
<form autocomplete="off">
<input
type = "text" // <----This is important
class = "hidden-password"
/>
</form>
重要提示 不要在登录或任何需要安全性的地方使用此功能。我在我的应用程序中使用它作为表单,用户已经通过身份验证并且不需要安全性。
干脆不要提交表单怎么样?什么都不需要记忆!
你的应用程序可能无论如何都没有JavaScript工作,对吧?
实际上,根本不要使用表单,只需收集输入值、序列化并执行Ajax调用。
$('#mybutton').on('click', function (e) {
$.ajax({
type: "POST",
url: 'mybackend',
data: $('#formdiv input').serialize(),
success: function (data) ...
请注意,这不是一个经过充分测试的想法,只是我在需要自动填充时观察到的一些东西,而我没有在任何处理此问题的许多主题中看到建议。