自动完成“关闭”完全被忽略

9

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

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

这是我的表单:

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

表单完全无视autocomplete="off"属性,仍然建议填写我的姓名和电话号码。有人有什么想法吗?Screen-shot

可能是浏览器自动填充设置。不过不确定。 - Ganesh Salunkhe
我不会说荷兰语,但是看起来你已经配置了Google Chrome自动填写你的街道地址(点击“Chrome中的自动填充设置”链接以进入设置)。 - Álvaro González
谢谢Alvaro,但我从未触碰过任何浏览器设置。所以这一定是默认行为。不过我会进一步调查。虽然我猜这就是autocomplete="off"函数的全部意图,对吧?如果有人在他们的浏览器中设置了这个,那么自动完成功能将被阻止。 - Dennis van Rooij
可能重复? https://dev59.com/1GUo5IYBdhLWcg3w1yPH#29582380 - camiblanch
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion - Dom
https://dev59.com/MXVD5IYBdhLWcg3wXacd - MajiD
9个回答

18

解决方案实际上非常简单:

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

惊人的优雅解决方案! - ina
2
你能指出更多关于“...since __away is an air value...”的信息吗? - Luke
@Luke,它只是表示一个不存在的值。autocomplete="luke"也可以使用。 - Justin
如果它适用于任何未知值,为什么它不能适用于“关闭”?为什么它会把“关闭”认为是“打开”呢? - David Latty
@DavidLatty,因为Chrome故意选择忽略值“off”,这是他们检测到的特殊值,然后选择忽略。他们认为自己比设计师更了解我们网站应该如何工作。 - run_the_race

3
Chrome不幸地决定忽略autocomplete="off",这让开发者很困难,但可能会使普通用户的使用更容易。
引用如下:
"...我们开始忽略Chrome Autofill数据的自动填充=关闭"
来源:https://bugs.chromium.org/p/chromium/issues/detail?id=468153(2015) 有解决方案吗? 不太确定... 该评论继续说道:
在您真正想要禁用自动填充的情况下,我们此时的建议是利用自动完成属性为您的字段提供有效的语义含义。 如果我们遇到一个我们不认识的自动完成属性,我们将不会尝试填充它。
但似乎这种方法不再起作用(从Chrome 53开始)。从这里的讨论 - Chrome Browser Ignoring AutoComplete=Off - 以及我的测试中,似乎没有办法关闭自动填充而不使用某种技巧。

1
即使使用autocomplete="__away"也不再起作用了。这真是令人恼火,因为Chrome和Edge认为作为开发者,我们很蠢,他们知道所有可能的用例,并在他们无限的智慧中决定没有可能想要关闭它的理由。当他们的浏览器开始填充不合理的数据时,我们就无法控制它。 - Vincent

2
尝试在密码元素中设置autocomplete="new-password"。这仅适用于Chrome浏览器。

1

试试这个:

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

或者这样:
$(document).ready(function(){ 
    $("input").attr("autocomplete", "off");
}); 

另一方面,您可能需要查看此Chrome浏览器忽略AutoComplete = Off

谢谢Murat。忘了提到我已经尝试过这个方法了,但是没有任何改变。 - Dennis van Rooij
非常奇怪。因为我创建了一个演示,并在三个不同的浏览器上尝试了一下。请看这里:https://jsfiddle.net/fYe2p/7/ - Murat Yıldız
是的,我知道...这正是让我发疯的原因。我已经禁用了处理表单的所有JavaScript。我已经删除了围绕字段的其他元素。肯定有我忽略的东西。但我不知道那是什么... - Dennis van Rooij
你尝试删除浏览器历史并重试了吗? - Murat Yıldız
我在Foundation Reveal模态框中有一个表单。如果我将具有相同名称的字段放置在模态框外(因此直接在页面上可见),自动完成功能将起作用。我尝试立即显示模态框(而不是visibility:hidden),但这并没有改变任何事情。因此,它是由其他原因引起的...但是是什么呢... - Dennis van Rooij

1
许多现代浏览器不支持autocomplete="off"。
这是Firefox(自版本38)、Google Chrome(自版本34)和Internet Explorer(自版本11)的行为。

0
"

"off"完全不起作用。我认为浏览器保存的表单将"off"视为输入标识符而不是设置值。因此,您需要随机字符串来使浏览器认为它是一个新的输入,这是您第一次看到的输入

"
$(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"完全不起作用。我认为浏览器保存的表单将"off"视为输入标识符而不是设置值。因此,您需要使用随机字符串使浏览器认为它是一个新的输入,就像您第一次看到的那个输入。 - Tonci14

0

看起来自Chrome v34版本开始,除非在form标签上设置autocomplete="off",否则Chrome将忽略该属性。

您无法通过创建一个隐藏的input元素来欺骗浏览器。自动填充功能将获取第一个input元素的文本来填充数据。

方法:1

You Can Try This One

<form id="" method="post" action="" autocomplete="off">
    <input type="text" style="display:none" />
    <input type="password" style="display:none">
    <asp:textbox autocomplete="off">
</form>


0

我刚刚用代码修复了它

<form autocomplete="off">
your inputs
</form>

所以你需要在你的<form>中使用autocomplete="off",而不仅仅是在<input>中使用。


1
这完全没有关系。Chrome 仍然会忽略它。 - Jon Ediger
我只是认为将每个单独的输入都包装在表单中没有意义。 - ina

0

试一下:

<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开始允许自动完成,所以它并没有真正帮助到我。 - Jon Ediger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接