【问题标题】:Autocomplete "Off" is completely ignored自动完成“关闭”被完全忽略
【发布时间】:2015-06-08 13:43:19
【问题描述】:

好的,所以我知道这个 autocomplete="off" 标签应该如何在除密码字段之外的所有输入上工作,我已经搜索了我的具体问题的答案,但看起来我是唯一一个有这个的问题。我知道我可以将它添加到表单元素或单个输入元素中。我的文档类型设置为:<!DOCTYPE html>

我有一个包含 2 个问题的表格(本示例已简化):姓名和电话。出于测试目的,我在两个字段和表单元素中都添加了 autocomplete="off"。

这是我的表格:

<form id="myform" autocomplete="off">
    <input autocomplete="off" type="text" name="name" />
    <input autocomplete="off" type="text" name="phone" />
</form>

表单完全忽略了 autocomplete="off" 并建议了我的姓名和电话号码。

有人知道吗?

【问题讨论】:

  • 可能是浏览器自动填充设置。不过不确定。
  • 我不会说荷兰语,但您似乎已将 Google Chrome 配置为自动填写您的街道地址(点击 Instellingen voor automatisch aanvullen in Chrome 链接以访问设置)。
  • 感谢 Alvaro,但我从不碰任何浏览器设置。所以这必须是默认行为。不过,我将对此进行进一步调查。虽然我猜这就是 autocomplete="off" 功能的全部想法,对吧?如果有人在他们的浏览器中进行了此设置,那么无论如何都会阻止自动完成。

标签: html forms autocomplete


【解决方案1】:

解决办法其实很简单:

autocomplete="__away"

我们所做的是告诉任何浏览器完全忽略该字段,因为 __away 是一个空气值 - 不存在。

【讨论】:

  • 令人惊叹的优雅解决方案!
  • 你能指出一些关于的更多信息“...因为__away是一个空气价值...”
【解决方案2】:

我只是用

修复它
<form autocomplete="off">
your inputs
</form>

所以你需要autocomplete="off" 在你的&lt;form&gt; 而不仅仅是&lt;input&gt;

【讨论】:

  • 这根本不重要。 Chrome 仍然会忽略它。
  • 我也只是认为将每个单独的输入包装在表单中没有意义
【解决方案3】:

“关闭”根本不起作用。我的东西浏览器保存的表单知道“关闭”作为输入标识符而不是设置值。所以你需要随机字符串来让浏览器成为一个新的输入,你第一次看到的输入

$(document).ready(function(){
    $( document ).on( 'focus', ':input', function(){
        let text = "";
        let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for (let i = 0; i < 20; i++)
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        $( this ).attr( 'autocomplete', text );
    });
});

【讨论】:

  • "off" 根本不起作用。我的东西浏览器保存的表单知道“关闭”作为输入标识符而不是设置值。所以你需要随机字符串来让浏览器成为一个新的输入,你第一次看到的输入。
【解决方案4】:

试试这个:

<form id="myform" autocomplete="dummy-no-auto-complete-fix">
    <input autocomplete="dummy-no-auto-complete-fix" type="text" name="name" />
    <input autocomplete="dummy-no-auto-complete-fix" type="text" name="phone" />
</form>

【讨论】:

  • 这对我来说在 chrome 中工作,但后来 firefox 开始允许自动完成,所以它并没有真正的帮助。
【解决方案5】:

尝试在密码元素中设置 autocomplete="new-password"。这仅适用于 chrome

【讨论】:

    【解决方案6】:

    许多现代浏览器不支持 autocomplete="off"。

    这是 Firefox(自 38 版起)、Google Chrome(34 版起)和 Internet Explorer(11 版起)中的行为。

    【讨论】:

      【解决方案7】:

      不幸的是,Chrome 决定忽略 autocomplete="off",这给开发人员带来了困难,希望能为普通用户提供一些更容易的东西。

      ...我们开始忽略 Chrome 自动填充数据的 autocomplete=off

      来源:https://bugs.chromium.org/p/chromium/issues/detail?id=468153 (2015)

      有解决办法吗?

      不是真的...那条评论还在继续:

      如果您真的想禁用自动填充,我们此时的建议是利用 autocomplete 属性为您的字段赋予有效的语义含义。如果我们遇到无法识别的自动完成属性,我们不会尝试填充它。

      但这似乎不再起作用(从 Chrome 53 开始)。从这里的讨论 - Chrome Browser Ignoring AutoComplete=Off - 以及我自己的测试来看,似乎不再有一种方法可以在不使用某种 hack 的情况下关闭自动填充。

      【讨论】:

      • 甚至 autocomplete="__away" 也不再起作用了。这令人愤怒,因为 Chrome 和 Edge 假设我们作为开发人员是愚蠢的,他们知道所有可能的用例,并以他们无限的智慧决定没有可能的理由想要关闭它,并且当他们的浏览器开始填充字段时没有意义的数据我们无法控制。
      【解决方案8】:

      试试这个:

      $(document).ready(function(){
          $( document ).on( 'focus', ':input', function(){
              $( this ).attr( 'autocomplete', 'off' );
          });
      });
      

      或者这个:

      $(document).ready(function(){ 
          $("input").attr("autocomplete", "off");
      }); 
      

      另一方面,您可能会看看这个Chrome Browser Ignoring AutoComplete=Off。希望这会有所帮助..

      【讨论】:

      • 感谢穆拉特。忘了说这是我已经尝试过的东西。没有任何区别。
      • 很奇怪。因为我创建了一个演示并尝试了三种不同的浏览器。请看一下:jsfiddle.net/fYe2p/7
      • 是的,我知道...这正是它让我发疯的原因。我已禁用所有处理表单的 javascript。我已经删除了字段周围的其他元素。一定有什么我错过了。但我不知道那是什么......
      • 您是否尝试删除浏览器历史记录并重试?
      • 我在 Foundation Reveal 模式中有这个表格。如果我将具有相同名称的字段放在模式之外(在页面上直接可见)。自动完成工作。我曾尝试立即显示模态(而不是可见性:隐藏),但这并没有改变任何事情。所以它是由其他原因引起的......但是什么......
      猜你喜欢
      • 2013-12-23
      • 2012-11-19
      • 2019-07-04
      • 1970-01-01
      • 2022-06-15
      • 2015-05-21
      • 1970-01-01
      • 2021-04-09
      • 2011-10-19
      相关资源
      最近更新 更多