【发布时间】:2011-01-12 06:41:27
【问题描述】:
是否可以使用 CSS 来禁用表单元素(特别是文本字段)的自动完成功能?
我使用了一个不允许自动完成元素的标签库,我想在不使用 Javascript 的情况下禁用自动完成。
【问题讨论】:
是否可以使用 CSS 来禁用表单元素(特别是文本字段)的自动完成功能?
我使用了一个不允许自动完成元素的标签库,我想在不使用 Javascript 的情况下禁用自动完成。
【问题讨论】:
就目前而言,CSS 中没有“自动完成关闭”属性。但是,html 有一个简单的代码:
<input type="text" id="foo" value="bar" autocomplete="off" />
如果你正在寻找一个站点范围的效应器,一个简单的方法是简单地有一个 js 函数来运行所有 'input' 并添加这个标签,或者寻找相应的 css 类/id。
自动完成属性在 Chrome 和 Firefox (!) 中运行良好,但另请参阅 Is there a W3C valid way to disable autocomplete in a HTML form?
【讨论】:
autocomplete="anyrandominvalidvalue" 可以工作。
您可以每次都使用生成的id 和name,它们是不同的,因此浏览器无法记住此文本字段并且无法建议某些值。
这至少是跨浏览器安全的替代方案,但我建议使用 RobertsonM (autocomplete="off") 的答案。
【讨论】:
autocomplete="off" 这样的任何提示将在 Browser X 版本(当前 + 1)中被忽略。 (例如,最新的 Google Chrome 会忽略 autocomplete=off。)
id 来破坏浏览器的自动完成功能,它仍然会将其保存在缓存中(即在用户的硬盘上)。这对某人来说是一件可怕的事情。卡号或任何其他敏感信息。此外,它不必要地使用户的磁盘驱动器混乱。每次他们访问您的页面时,都会在他们的计算机上保存一个新的(类似 cookie 的)文件。只是为了它,尝试清除您的 Chrome 缓存并查看它将释放多少空间(如果您有一段时间没有这样做)。这就是为什么我称之为糟糕的想法。
你可以通过jQuery轻松实现
$('input').attr('autocomplete','off');
【讨论】:
form 是唯一有效的方法。不是input。谢谢。
如果您使用的是 form,您可以禁用所有自动完成功能,
<form id="Form1" runat="server" autocomplete="off">
【讨论】:
CSS 没有这种能力。您需要使用客户端脚本。
【讨论】:
autocomplete="false" 将在 Edge 中工作。从技术上讲,任何无效值都可以在这里代替“false”。
我从这个问题的答案和网络上的其他文章中尝试了所有建议的方法,但无论如何都没有工作。我在表单元素中尝试了 autocomplete="new-random-value", autocomplete="off",使用如下客户端脚本,但在 $(document).ready() 之外,作为用户之一提到:
$(':input').on('focus', function () {
$(this).attr('autocomplete', 'off')
});
我发现浏览器中的另一个优先级可能会导致这种奇怪的行为!所以我搜索了更多,最后,我再次仔细阅读了this good article的以下行:
因此,许多现代浏览器不支持 登录字段的 autocomplete="off":
如果网站为 a 设置了 autocomplete="off" ,并且表单包括 用户名和密码输入字段,那么浏览器仍然会提供 记住这个登录,如果用户同意,浏览器会 下次用户访问该页面时自动填充这些字段。如果一个 站点为用户名和密码字段设置 autocomplete="off", 那么浏览器仍然会提供记住这个登录信息,如果 用户同意,下次浏览器会自动填充这些字段 用户访问该页面。这是 Firefox 中的行为(自版本 38)、谷歌浏览器 (34 起) 和 Internet Explorer (自版本 11).
如果您要定义用户管理页面,用户可以在其中指定 另一个人的新密码,因此您要防止 自动填写密码字段,您可以使用 autocomplete="new-password";但是,Firefox 尚未实现对这个值的支持。
它刚刚工作。我专门在 chrome 中尝试过,我希望这能继续工作并帮助其他人。
【讨论】:
我通过为所有输入添加一个虚假的自动完成名称解决了这个问题。
$("input").attr("autocomplete", "fake-name-disable-autofill");
【讨论】:
有3种方法,我提到它们是为了成为更好的方法......
1-HTML方式:
<input type="text" autocomplete="false" />
2-Javascript方式:
document.getElementById("input-id").getAttribute("autocomplete") = "off";
3-jQuery方式:
$('input').attr('autocomplete','off');
【讨论】:
我只是在自动完成时使用'new-password' 而不是'off'。
我也尝试过使用此代码并且可以工作(至少在我这方面),我使用 WP 和 GravityForm 为您提供信息
$('input').attr('autocomplete','new-password');
【讨论】:
感谢@ahhmarr's 解决方案,我能够在我的 Angular+ui-router 环境中解决同样的问题,我会在这里分享给有兴趣的人。
在我的index.html 中,我添加了以下脚本:
<script type="text/javascript">
setTimeout(function() {
$('input').attr('autocomplete', 'off');
}, 2000);
</script>
然后为了涵盖状态更改,我在根控制器中添加了以下内容:
$rootScope.$on('$stateChangeStart', function() {
$timeout(function () {
$('input').attr('autocomplete', 'off');
}, 2000);
});
超时用于在应用 jquery 之前呈现 html。
如果您找到更好的解决方案,请告诉我。
【讨论】:
您不能使用 CSS 来禁用自动完成功能,但可以使用 HTML:
<input type="text" autocomplete="false" />
从技术上讲,您可以将false 替换为任何无效值,它会起作用。这个 iOS 是我发现的唯一一个也适用于 Edge 的解决方案。
【讨论】: