Jquery在输入中禁用自动完成

时间:2012-12-29 02:01:23

标签: javascript jquery autocomplete

我有这段代码:

html:

<input id="register_username" type="text">
<input id="register_password" type="text">
<input id="register_repeatpassword" type="text">
<input id="register_email" type="text">

Jquery:

$(document).ready(function(){
    $('#register_username').attr('autocomplete','off');
    $('#register_password').attr('autocomplete','off');
    $('#register_repeatpassword').attr('autocomplete','off');
    $('#register_email').attr('autocomplete','off');
    });

我想禁用某些浏览器的自动完成功能,并且实际上让用户键入整个字段但代码不起作用,下拉菜单仍然出现,用户仍然可以选择之前键入的内容。我也试过用autocomplete="off"但没有发生任何事情。我在这里做错了什么?

11 个答案:

答案 0 :(得分:29)

只需添加:

autocomplete="off"

作为INPUT元素的属性,f.ex:

<input autocomplete="off" id="register_username" type="text" name="username">

答案 1 :(得分:12)

jQuery 版本:

$("#register_username").attr("autocomplete", "off");

答案 2 :(得分:6)

检查此fiddle

 document.getElementById("register_username").autocomplete="off"

答案 3 :(得分:3)

虽然我同意,autocomplete="off"应得到广泛支持,并且是最终解决方案,但它无效可能是HTML5 spec on the autocomplete attribute的结果:

  

自动完成机制必须由用户代理实现,就像用户修改了元素的值一样,必须在元素可变的时候完成(例如,在元素之后已插入文档,或用户代理停止解析时。)

对我而言,这意味着它应该是元素的“原始”属性,并且不能在渲染后添加。并且由于大多数浏览器都在实现新的规范 1 ,因此很可能在他们根据上述规范修正实现之前允许使用javascript。

如果您还没有,请尝试将属性直接添加到控件中,而不是依赖于jQuery这样做[推测]文档就绪。

1 我在这里使用spec,因为HTML5不是标准,但很多浏览器正在实现一些更具体的功能。自从IE5以来autocomplete已经存在,它可能是您可以考虑安全实施的那些之一。

答案 4 :(得分:1)

<form id='myForm'>
    <input id="register_username" type="text">
    <input id="register_password" type="text">
    <input id="register_repeatpassword" type="text">
    <input id="register_email" type="text">
</form>
$(document).ready(function(){
    $('#myForm').on( 'focus', ':input', function(){
        $(this).attr( 'autocomplete', 'off' );
    });
});

答案 5 :(得分:1)

现在有一天你需要改变&#34;关闭&#34;另一个随机字符串,如&#34; nope&#34;:

<强> Jquery的:

$("#register_username").attr("autocomplete", "nope");

<强> HTML:

<input id="register_username" type="text" autocomplete="nope">

答案 6 :(得分:1)

从2019年4月23日开始工作。

如果要在页面上的所有内容上禁用Chrome的自动填充功能,尤其是如果您不使用表单而是使用序列化的jQuery选择器提交数据时,尤其如此。

在运行时执行此操作对我而言是最好的结果,Chrome仍会在运行时自动填充,因此这是应对Chrome行为的合理解决方案。

只需在代码底部添加此内容,Chrome便不会尝试强制自动填充内容:

<script>
    $(document).ready(function () {
        $("input").attr("autocomplete", "new-password");
    });
</script>

答案 7 :(得分:0)

万一有人来这里寻找如何关闭其jQuery自动完成功能:

$("#elementId").autocomplete({
  disabled: true
  });

答案 8 :(得分:0)

如果有人来这里寻找如何在其页面的每种形式上关闭其jQuery自动完成功能:

$('form *').prop('autocomplete', 'off');

答案 9 :(得分:0)

对于仍然在这个问题上挣扎的任何人,这种解决方案组合是唯一对我有用的东西。 基于此脚本: https://github.com/terrylinooo/jquery.disableAutoFill

del df['ID']

将它们放在页面的页脚中:

interface SpecificAction extends Action {

    String CONSTANT_FIELD = "Specific field";

}

class Testt<A extends SpecificAction>{

    void someMethod(){
        System.out.println(A.CONSTANT_FIELD); // Fine
    }

}

答案 10 :(得分:-1)

使用jQuery,我在布局页面中执行此操作,或者在网站的每个页面上显示一些HTML。

$(document).ready(function () {

        //when the page is done loading, disable autocomplete on all inputs[text]
        $('input[type="text"]').attr('autocomplete', 'off');

        //do the same when a bootstrap modal dialog is opened
        $(window).on('shown.bs.modal', function () {
            $('input[type="text"]').attr('autocomplete', 'off');
        });
});