使用xhtml1-transitional.dtd
doctype时,请使用以下HTML收集信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记警告:
没有属性“自动完成”。
是否存在W3C /标准方法来禁用表单中敏感字段上的浏览器自动完成功能?
使用xhtml1-transitional.dtd
doctype时,请使用以下HTML收集信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记警告:
没有属性“自动完成”。
是否存在W3C /标准方法来禁用表单中敏感字段上的浏览器自动完成功能?
Answers:
这是MDC上的一篇好文章,它解释了形成自动补全的问题(和解决方案)。微软也在这里发布了类似的内容。
老实说,如果这对您的用户来说很重要,则以这种方式“打破”标准似乎是适当的。例如,亚马逊相当多地使用了“自动完成”属性,并且看起来运行良好。
如果要完全删除警告,则可以使用JavaScript将属性应用于支持该警告的浏览器(IE和Firefox是重要的浏览器),使用 someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
最后,如果您的站点使用HTTPS,则IE会自动关闭自动补全功能(据我所知,其他一些浏览器也是如此)。
更新资料
由于此答案仍有很多反对意见,我只想指出,在HTML5中,您可以在表单元素上使用'autocomplete'属性。请参阅W3C上的文档。
如果W3C提出一种可与(X)HTML4一起使用的方法,我将感到非常惊讶。自动完成功能完全基于浏览器,并且在最近几年(很早就编写了HTML4标准)中引入。
不过,如果HTML5有一个,也不会感到惊讶。
编辑:我认为,HTML5 确实具有该功能。要将页面定义为HTML5,请使用以下doctype(即:将其作为源代码中的第一个文本)。请注意,并非所有浏览器都支持此标准,因为它仍处于草稿形式。
<!DOCTYPE html>
不,但是浏览器自动完成通常是由与name
先前填写的字段具有相同属性的字段触发的。如果您可以采用一种巧妙的方法来获得随机的字段名称,则自动完成功能将无法提取该字段的任何先前输入的值。
如果要给输入字段一个名称,例如“ email_<?= randomNumber() ?>
”,然后让脚本通过POST或GET变量接收此数据循环,以查找与模式“ email_[some number]
” 匹配的内容,则可以将其删除,这样就可以了(实际上),无论浏览器如何,都保证成功。
不,Mozila Wiki中的一篇好文章。
我将继续使用invalid attribute
。我认为这是实用主义胜过验证的地方。
如何使用JavaScript进行设置?
var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false
这不是完美的,但是您的HTML将是有效的。
我建议捕获所有4种类型的输入:
$('form,input,select,textarea').attr("autocomplete", "off");
参考:
:input
太
如果您使用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");});
autocomplete
是以不同于html的其他方式设置(无效)属性
$('input.autocompleteOff').val('');
,这似乎还可以。
autocomplete="off"
这应该解决所有现代浏览器的问题。
<form name="form1" id="form1" method="post" autocomplete="off"
action="http://www.example.com/form.cgi">
[...]
</form>
在当前版本的Gecko浏览器中,autocomplete属性可以完美工作。对于较早的版本,回到Netscape 6.2,它适用于带有“地址”和“名称”的表单的例外。
更新资料
在某些情况下,即使将autocomplete属性设置为off,浏览器也会继续建议自动补全值。对于开发人员而言,这种意外行为可能会令人困惑。真正强制不自动补全的技巧是为属性分配一个随机字符串,例如:
autocomplete="nope"
由于此随机值不是valid one
,浏览器将放弃。
使用随机的“名称”属性对我有用。
我在发送表单时重置了name属性,因此在发送表单时您仍然可以按名称访问它。(使用id属性存储名称)
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");
}
}
}
<script type="text/javascript">
/* <![CDATA[ */
document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
/* ]]> */
</script>