Есть ли W3C действительный способ отключить автозаполнение в форме HTML? - PullRequest
418 голосов
/ 24 февраля 2009

При использовании типа документа xhtml1-transitional.dtd, собирая номер кредитной карты со следующим HTML

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

пометит предупреждение на валидаторе W3C:

нет атрибута "автозаполнение".

Есть ли в W3C / стандарте способ отключить автозаполнение браузера для чувствительных полей в форме?

Ответы [ 17 ]

6 голосов
/ 23 января 2012

Использование случайного атрибута 'name' работает для меня.

Я сбрасываю атрибут имени при отправке формы, чтобы вы могли получить к нему доступ по имени при отправке формы. (используя атрибут id для хранения имени)

5 голосов
/ 07 февраля 2013

Обратите внимание, что существует некоторая путаница с расположением атрибута автозаполнения. Его можно применять либо ко всему тегу FORM, либо к отдельным тегам INPUT, и до HTML5 это не было стандартизировано (что явно допускает оба местоположения ). В более старых документах в этой статье Mozilla упоминается только тег FORM. В то же время некоторые сканеры безопасности будут искать автозаполнение только в теге INPUT и сообщать, если он отсутствует (даже если он равен в родительской ФОРМЕ). Более подробный анализ этого беспорядка размещен здесь: Путаница с атрибутами AUTOCOMPLETE = OFF в формах HTML .

3 голосов
/ 24 февраля 2009

Не идеально, но вы можете изменять идентификатор и имя текстового поля каждый раз, когда вы его визуализируете - вам придется отслеживать его на стороне сервера, чтобы вы могли получить данные.

Не уверен, сработает ли это или нет, это была просто мысль.

2 голосов
/ 01 января 2014
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");
        }
    }
}
2 голосов
/ 01 августа 2011

Я думаю, что есть более простой способ. Создайте скрытый вход со случайным именем (через JavaScript) и установите для него имя пользователя. Повторите с паролем. Таким образом, ваш серверный сценарий точно знает, какое имя соответствующего поля, сохраняя автозаполнение в темноте.

Я, наверное, не прав, но это всего лишь идея.

0 голосов
/ 18 октября 2018

Это решение работает со мной:

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

, если вы хотите использовать автозаполнение в этом регионе: добавьте autocomplete="false" в элемент например:

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">
0 голосов
/ 09 апреля 2010

Действительное автозаполнение выключено

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