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

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

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

没有“自动完成”属性。

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


当前回答

这个解决方案对我很管用:

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

如果你想在这个区域使用自动填充:在元素中添加autocomplete="false" 例:

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

其他回答

Note that there's some confusion about location of the autocomplete attribute. It can be applied either to the whole FORM tag or to individual INPUT tags, and this wasn't really standardized before HTML5 (that explicitly allows both locations). Older docs most notably this Mozilla article only mentions FORM tag. At the same time some security scanners will only look for autocomplete in INPUT tag and complain if it's missing (even if it is in the parent FORM). A more detailed analysis of this mess is posted here: Confusion over AUTOCOMPLETE=OFF attributes in HTML forms.

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

有效的自动补全

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

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

我在发送表单时重置了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");
        }
    }
}