在HTML表单中,有一种有效的方法可以禁用自动完成吗?

431

使用 xhtml1-transitional.dtd 文档类型时,使用以下 HTML 收集信用卡号码:

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

在 W3C 验证器上会产生警告:

不存在 "autocomplete" 属性。

是否有符合标准的方法可以禁用表单中敏感字段的浏览器自动完成?


10
你确定要更改用户的自动完成设置吗?如果他们已经开启了它,那么他们可能喜欢这个功能。自动完成是完全基于浏览器端的功能,就像允许用户更改字体大小的按钮一样。你不应该干涉他们的意愿。 - rmeador
113
即使对于像信用卡号这样敏感的信息,我也想不出有多少人会希望它被记住 - 特别是因为大多数浏览器默认启用了自动填充功能。如果他们非常想记住它,可以使用像Google工具栏这样的表单填写助手。 - matt b
13
我的使用情况略有不同 - 我正在开发自己的自动完成功能,我不希望它与浏览器的自动完成功能发生冲突。我刚刚发现autocomplete =“off”是无效的,但似乎没有其他简单的解决方案(用js注入只是愚蠢的做法)。 - thepeer
13
@rmeador 因为有时我们想要提供一个更加用户友好的替代标准的自动建议框。 @corydoras 请不要霸道地使用你的OSX,这对解决问题没有帮助。 - Josh M.
12
问题在于,如果发生欺诈交易,银行将追究商家的责任……即使这完全是顾客的错。因此,在某些情况下,禁用该功能对于顾客来说是合理的。 - Anon21
显示剩余9条评论
18个回答

6

对我来说,使用随机的“name”属性有效。

在发送表单时,我将重置名称属性,因此您仍然可以通过名称访问它(使用id属性存储名称)。


5
请注意,有关自动完成属性位置的问题存在某些混淆。它可以应用于整个FORM标签或单个INPUT标签,并且在HTML5之前并没有真正标准化(HTML5明确允许两个位置)。旧文档特别是这篇Mozilla文章只提到FORM标签。同时,一些安全扫描程序仅查找INPUT标签中的自动完成并抱怨如果其缺失(即使它在父FORM中)。有关此混乱的更详细分析发布在此处:HTML表单中AUTOCOMPLETE=OFF属性的混乱

3

虽然不是最理想的方法,但您可以在每次呈现文本框时更改其ID和名称 - 您还必须在服务器端跟踪它,以便可以获取数据。

不确定这是否有效,只是一个想法。


2
if (document.getElementsByTagName) {
    var inputElements = document.getElementsByTagName("input");
    for (i=0; inputElements[i]; i++) {
        if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
            inputElements[i].setAttribute("autocomplete","off");
        }
    }
}

2

我认为有一种更简单的方法。 通过javascript创建一个带有随机名称的隐藏输入框,并将用户名设置为其中一个。然后重复此步骤以设置密码。这样,您的后端脚本就知道适当的字段名称,同时使自动完成无法识别。

我可能是错的,但这只是一个想法。


0

-1

这个解决方案对我有效:

$('form,input,select,textarea').attr("autocomplete", "nope");

如果您想在此区域使用自动填充功能:请在元素中添加autocomplete="false" 例如:

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">

-5

有效的自动完成关闭

<script type="text/javascript">
    /* <![CDATA[ */
    document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
    /* ]]> */ 
</script>

13
如果用户关闭了JS,他们肯定无法完成订单,因为他们无法输入卡号。最好通过JS来增加这个属性 - 最坏的情况是,如果JS被关闭,那么自动填充功能就会失效,但至少他们可以下单。这只是一个想法 :) - Terry_Brown

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