通过CSS禁用自动完成功能

时间:2010-02-02 17:44:01

标签: html css html-form

是否可以使用CSS在表单元素(特别是文本字段)上禁用自动填充?

我使用的标签库不允许自动完成元素,我想在不使用Javascript的情况下禁用自动完成功能。

12 个答案:

答案 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)

您可以每次使用生成的idname,这是不同的,因此浏览器无法记住此文本字段,并且无法建议某些值。

这至少是跨浏览器的安全选择,但我建议您回答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');