【问题标题】:Jquery disable autocomplete in inputJquery在输入中禁用自动完成
【发布时间】:2012-12-14 05:22:30
【问题描述】:

我有这个代码:

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",但什么也没发生。我在这里做错了什么?

【问题讨论】:

  • 对我来说 autocomplete="off" 在 Chrome (v 41.0.2272.89) 上被忽略,首先我认为这是因为我在页面加载后通过 jquery 更改属性,但甚至插入autocomplete="off" 直接上input 没有解决问题。另一个post 可能与该问题有关。

标签: javascript jquery autocomplete


【解决方案1】:

只需添加:

autocomplete="off"

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

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

【讨论】:

  • 或 &lt;form&gt; 节点也是如此。 (顺便说一句,我认为根本问题是它在 jQuery 应用后加载时似乎不起作用,因为 OP 正在添加这个属性)。
  • @MaxPain 什么浏览器?你能发一个小提琴吗?
【解决方案2】:

jQuery 版本:

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

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 它与所有其他答案相同,只是它使用 jQuery,这就是它声称要做的。
  • OP 询问他们自己的代码有什么问题,而不是询问替代方法。其他一些答案也没有回答 OP 的问题,但审阅者队列并没有提供一次要审阅的所有答案。
  • 无论如何,那是三年前的事了……今天我不会费心评论这样的事情,因为它仍然对人们有帮助。 :)
【解决方案3】:

检查这个fiddle out

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

【讨论】:

    【解决方案4】:

    如果有人来这里寻找如何关闭他们的 jquery 自动完成功能:

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

    【讨论】:

    • 感谢您的建议。尝试 $("#id").attr("autcomplete", "off") 或使用 false 或其他值无效,但您的解决方案有效。
    • 太棒了一定要给个赞!
    • 有效!但是如何再次打开它? disabled: false 似乎抛出了一个 jquery 错误。
    【解决方案5】:

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

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

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

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

    1由于 HTML5 不是标准,所以我在这里使用规范有点失落,但许多浏览器正在实现一些更具体的功能。由于autocomplete 自 IE5 以来一直存在,它可能是您可以考虑安全实现的其中之一。

    【讨论】:

    • 我试过这样做 :&lt;input id="register_username" type="text" name="username" autocomplete="off"&gt; 仍然有同样的问题。
    • @MaxPain:通过任何更改,如果您转到about:config 是否设置为Wallet.crypto.autocompleteoverride?
    • 我不确定那是什么。我猜没有。
    • @MaxPain:简单地说,FF 的插件可以强制它记住密码,尽管网站管理员设置了偏好(例如设置autocomplete="off")。我只是在检查以确保不是这种情况。
    【解决方案6】:

    现在有一天,您需要将“off”更改为另一个随机字符串,例如“nope”:

    Jquery:

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

    HTML:

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

    【讨论】:

      【解决方案7】:
      <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' );
          });
      });
      

      【讨论】:

        【解决方案8】:

        截至 2019 年 4 月 23 日工作。

        如果您想在页面上的所有内容上禁用 Chrome 的自动填充功能,特别是如果您不使用表单而是使用序列化的 jquery 选择器来提交数据。

        在运行时执行此操作对我来说效果最好,而且 Chrome 无论如何都会在运行时自动填充,因此这是对抗 Chrome 行为的合理解决方案。

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

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

        【讨论】:

        • 不工作:Chrome 75.0.3770.142。仅当您将 autocomplete='off' 属性直接放在输入元素上时它才有效。以后通过 js 进行的所有操作都会被忽略。
        【解决方案9】:

        对于仍在为这个问题苦苦挣扎的人来说,这种解决方案组合是唯一对我有用的方法。 基于此脚本: https://github.com/terrylinooo/jquery.disableAutoFill

        <form id="myForm">...</form>
        

        将这些放在页面的页脚中:

            <script src="https://cdn.jsdelivr.net/npm/disableautofill/src/jquery.disableAutoFill.min.js"></script> 
            
        <script>
                $(document).ready(function () {
                    $("input").attr("autocomplete", "new-password");
                    $('#myForm').disableAutoFill();
                });
            </script>
        

        【讨论】:

          【解决方案10】:

          使用 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');
                  });
          });
          

          【讨论】:

            【解决方案11】:

            如果有人来这里寻找如何在他们页面的每个表单上关闭他们的 jquery 自动完成功能:

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

            【讨论】:

              猜你喜欢
              • 2020-07-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多