是否可以使用CSS在表单元素(特别是文本字段)上禁用自动填充?
我使用的标签库不允许自动完成元素,我想在不使用Javascript的情况下禁用自动完成功能。
答案 0 :(得分:117)
目前,CSS中没有'autocomplete off'属性。但是,html有一个简单的代码:
<input type="text" id="foo" value="bar" autocomplete="off" />
如果你正在寻找一个站点范围的效应器,一个简单的方法就是只需要一个js函数来运行所有'输入'并添加这个标签,或者查找相应的css类/ id。 / p>
自动填充属性在Chrome和Firefox(!)中运行正常,但另见Is there a W3C valid way to disable autocomplete in a HTML form?
答案 1 :(得分:46)
你可以通过jQuery轻松实现
$('input').attr('autocomplete','off');
答案 2 :(得分:42)
您可以每次使用生成的id
和name
,这是不同的,因此浏览器无法记住此文本字段,并且无法建议某些值。
这至少是跨浏览器的安全选择,但我建议您回答RobertsonM(autocomplete="off"
)的答案。
答案 3 :(得分:15)
如果您使用的是form
,则可以使用
<form id="Form1" runat="server" autocomplete="off">
答案 4 :(得分:12)
CSS没有此功能。您需要使用客户端脚本。
答案 5 :(得分:3)
我尝试了此问题解答和网络上其他文章提供的所有建议方法,但无论如何都无法正常工作。我在表单元素中尝试了autocomplete =“ new-random-value”,autocomplete =“ off”,使用如下客户端脚本,但在$(document).ready()之外,提到了其中一位用户:
$(':input').on('focus', function () {
$(this).attr('autocomplete', 'off')
});
我发现浏览器中的另一个优先级可能导致这种奇怪的行为!因此,我进行了更多的搜索,最后,我在this good article的下面仔细阅读了以下内容:
因此,许多现代浏览器不支持 登录字段为autocomplete =“ off”:
如果网站为设置了autocomplete =“ off”,并且表单包括 用户名和密码输入字段,然后浏览器仍会提供 记住该登录信息,如果用户同意,浏览器将 下次用户访问该页面时,自动填充这些字段。如果一个 网站为用户名和密码字段设置了autocomplete =“ off”, 那么浏览器仍会记住该登录信息,如果 用户同意,下次浏览器会自动填充这些字段 用户访问页面。这是Firefox中的行为(自版本 38),Google Chrome(自34起)和Internet Explorer(自版本 11)。
如果要定义用户管理页面,用户可以在其中指定一个 另一个人的新密码,因此您要防止 自动填写密码字段,您可以使用 autocomplete =“ new-password” ;但是,尚未在Firefox上实现对此值的支持。
这是可行的。我专门尝试了chrome,希望它能继续有效并为他人提供帮助。
答案 6 :(得分:1)
感谢@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。
如果您找到更好的解决方案,请告诉我。
答案 7 :(得分:1)
有3种方法,我将它们称为更好的方法...
1-HTML方式:
from dateutil import rrule
from datetime import datetime, timedelta
import time
import schedule
def job():
f = open('model.py')
try:
exec(f.read())
finally:
f.close()
start_hour = datetime.strptime("11","%H")
end_hour = start_hour + timedelta(hours=7)
for t in rrule.rrule(rrule.HOURLY, dtstart=start_hour, until=end_hour):
schedule.every().monday.at(t.strftime("%H:%M")).do(job)
schedule.every().tuesday.at(t.strftime("%H:%M")).do(job)
schedule.every().wednesday.at(t.strftime("%H:%M")).do(job)
schedule.every().thursday.at(t.strftime("%H:%M")).do(job)
schedule.every().friday.at(t.strftime("%H:%M")).do(job)
while True:
schedule.run_pending()
time.sleep(1)
2-JavaScript方式:
<input type="text" autocomplete="false" />
3-jQuery方式:
document.getElementById("input-id").getAttribute("autocomplete") = "off";
答案 8 :(得分:0)
我通过为所有输入添加一个假的自动完成名称来解决了这个问题。
$("input").attr("autocomplete", "fake-name-disable-autofill");
答案 9 :(得分:0)
您不能使用CSS禁用自动完成功能,但可以使用HTML:
<input type="text" autocomplete="false" />
从技术上讲,您可以将false
替换为任何无效值,然后它将起作用。我找到的唯一的iOS解决方案也适用于Edge。
答案 10 :(得分:0)
我只是在自动完成时使用'new-password'
而不是'off'
。
并且我也尝试使用此代码并且可以正常工作(至少在我看来是这样),我使用WP和GravityForm作为您的信息
$('input').attr('autocomplete','new-password');
答案 11 :(得分:-3)
$('input').attr('autocomplete','off');