当使用xhtml1-transitional。使用以下HTML收集一个信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记一个警告:
没有“自动完成”属性。
是否有一种符合标准的方法来禁用浏览器自动完成表单中的敏感字段?
当使用xhtml1-transitional。使用以下HTML收集一个信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记一个警告:
没有“自动完成”属性。
是否有一种符合标准的方法来禁用浏览器自动完成表单中的敏感字段?
当前回答
如果你使用jQuery,你可以这样做:
$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});
并在你想要的地方使用autocompleteOff类:
<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />
如果你想要所有的输入都是autocomplete=off,你可以简单地使用:
$(document).ready(function(){$("input").attr("autocomplete","off");});
其他回答
下面是一篇来自MDC的好文章,它解释了形成自动补全的问题(和解决方案)。 微软在这里也发布了类似的东西。
老实说,如果这对你的用户很重要,用这种方式“打破”标准似乎是合适的。例如,亚马逊使用“自动完成”属性相当多,它似乎工作得很好。
如果您想完全删除警告,可以使用JavaScript使用someForm将该属性应用到支持它的浏览器(IE和Firefox是重要的浏览器)。setAttribute("autocomplete", "off");someFormElm。setAttribute("autocomplete", "off");
最后,如果你的网站使用的是HTTPS, IE会自动关闭自动完成功能(据我所知,其他一些浏览器也是这样做的)。
更新
由于这个答案仍然得到了相当多的赞,我只是想指出,在HTML5中,你可以在你的表单元素上使用“autocomplete”属性。请参阅W3C上的文档。
我认为有一个更简单的方法。 用一个随机的名字(通过javascript)创建一个隐藏的输入,并设置用户名。重复输入密码。这样,您的后端脚本就可以确切地知道适当的字段名称是什么,同时保持自动补全在黑暗中。
我可能错了,但这只是个想法。
不理想,但你可以改变id和文本框的名称,每次你渲染它-你必须跟踪它的服务器端,这样你就可以得到数据。
不确定这是否会起作用,这只是一个想法。
如果W3C提出了一种与(X)HTML4一起工作的方法,我会感到非常惊讶。自动补全功能完全是基于浏览器的,是在过去几年中引入的(远远落后于HTML4标准的编写)。
不过,如果HTML5有这样的功能也不足为奇。
编辑:正如我所想,HTML5确实有这个功能。要将页面定义为HTML5,请使用以下doctype(即:将其作为源代码中的第一个文本)。请注意,并非所有浏览器都支持这个标准,因为它仍处于草案阶段。
<!DOCTYPE html>
我在2020年就做到了!
我基本上创建了一个css类,对我的输入应用-webkit-text-security。
这里有一个最近讨论的链接: https://stackoverflow.com/a/64471795/8754782