使用 xhtml1-transitional.dtd
文档类型时,使用以下 HTML 收集信用卡号码:
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
在 W3C 验证器上会产生警告:
不存在 "autocomplete" 属性。
是否有符合标准的方法可以禁用表单中敏感字段的浏览器自动完成?
使用 xhtml1-transitional.dtd
文档类型时,使用以下 HTML 收集信用卡号码:
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
在 W3C 验证器上会产生警告:
不存在 "autocomplete" 属性。
是否有符合标准的方法可以禁用表单中敏感字段的浏览器自动完成?
这里是来自MDC的一篇很好的文章,介绍了表单自动完成的问题和解决方案。 Microsoft 也发表了类似的内容。
说实话,如果这对你的用户很重要,以这种方式“打破”标准似乎是合适的。例如,亚马逊使用“autocomplete”属性很多次,看起来效果不错。
如果您想完全删除警告,可以使用JavaScript将该属性应用于支持它的浏览器(IE和Firefox是重要的浏览器)someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
最后,如果您的站点正在使用HTTPS,则IE会自动关闭自动完成(据我所知,其他一些浏览器也是如此)。
更新
由于这个答案仍然得到了很多赞,我想指出在HTML5中,您可以在表单元素上使用“autocomplete”属性。请参见W3C上的文档。
autocomplete
may be used not only on form
element, and off
value works at least in chromium-40.0.2214.115
- x-yuri如果W3C提出的方法可以在(X)HTML4中使用,那我会非常惊讶。自动完成功能完全基于浏览器,在最近几年被引入(远晚于HTML4标准的编写时间)。
不过,如果是HTML5,我一点也不会感到惊讶。
编辑: 如我所料,HTML5确实拥有该功能。要将您的页面定义为HTML5,请使用以下doctype(即将其放置在源代码的最前面)。请注意,并非所有浏览器都支持此标准,因为它仍处于草案形式。
<!DOCTYPE html>
HTML 4: 不支持
HTML 5: 支持
自动填充属性是一种枚举属性。该属性有两个状态,“on”关键字映射到“on”状态,“off”关键字映射到“off”状态。该属性也可以省略,默认缺失值为“on”状态。“off”状态表示默认情况下,表单控件中的自动填充字段名称设置为“off”;“on”状态表示默认情况下,表单控件中的自动填充字段名称设置为“on”。
参考资料:W3
name
属性的字段触发。如果你能想出一种聪明的方法来设置一个随机名称
,自动填充就无法提取任何先前输入过的值。email_<?= randomNumber() ?>
",然后让接收此数据的脚本循环遍历POST或GET变量,查找与模式"email_[某个数字]
"匹配的内容,那么这样做就可行,并且(几乎)可以保证成功,而且不受任何浏览器的影响。用JavaScript来设置它怎么样?
var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false
虽然不是完美的,但您的HTML将是有效的。
我建议捕获所有4种类型的输入:
$('form,input,select,textarea').attr("autocomplete", "off");
参考资料:
:input
。 - Ascherer如果你使用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
属性的方式进行设置。 - matt b$('input.autocompleteOff').val('');
,看起来没问题。 - dqdautocomplete = "off"
,这将解决所有现代浏览器的问题。
<form name="form1" id="form1" method="post" autocomplete="off"
action="http://www.example.com/form.cgi">
[...]
</form>
在当前版本的Gecko浏览器中,自动填充属性可以完美地运行。在早期版本中,从Netscape 6.2开始,自动填充属性只在“地址”和“名称”表单中无法正常工作。
更新
在某些情况下,即使将自动填充属性设置为关闭,浏览器仍会继续建议自动填充值。这种意外的行为可能会让开发人员感到困惑。真正强制禁用自动填充的技巧是将一个随机字符串分配给此属性,例如:
autocomplete="nope"
由于这个随机值不是一个有效的值
,浏览器会放弃。
autocomplete='off'