当使用xhtml1-transitional。使用以下HTML收集一个信用卡号

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

将在W3C验证器上标记一个警告:

没有“自动完成”属性。

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


当前回答

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");
        }
    }
}

其他回答

如果你使用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");});

另一种方法——这也有助于安全性——是每次显示输入框时调用不同的东西:就像captha一样。这样,会话就可以读取一次性的输入,而自动完成就没有什么可做的了。

关于rmeador关于你是否应该干扰浏览器体验的问题,有一点:我们开发联系人管理和CRM系统,当你把别人的数据输入一个表单时,你不希望它不断提示你自己的详细信息。

这可以满足我们的需求,但是我们可以奢侈地告诉用户使用一个不错的浏览器:)

autocomplete='off' 

我建议捕捉所有4种类型的输入:

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

参考:

http://www.w3.org/Submission/web-forms2/#the-autocomplete http://dev.w3.org/html5/markup/input.html

如果W3C提出了一种与(X)HTML4一起工作的方法,我会感到非常惊讶。自动补全功能完全是基于浏览器的,是在过去几年中引入的(远远落后于HTML4标准的编写)。

不过,如果HTML5有这样的功能也不足为奇。

编辑:正如我所想,HTML5确实有这个功能。要将页面定义为HTML5,请使用以下doctype(即:将其作为源代码中的第一个文本)。请注意,并非所有浏览器都支持这个标准,因为它仍处于草案阶段。

<!DOCTYPE html>

我认为有一个更简单的方法。 用一个随机的名字(通过javascript)创建一个隐藏的输入,并设置用户名。重复输入密码。这样,您的后端脚本就可以确切地知道适当的字段名称是什么,同时保持自动补全在黑暗中。

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