ОБНОВЛЕНИЕ на 2017 год: похоже, что ответ от Кэти содержит больше актуальной информации, чем у меня. Будущие читатели: отдайте свой голос за ее ответ .
Это отличный вопрос, и к нему трудно найти документацию. На самом деле, во многих случаях вы обнаружите, что функция автозаполнения Chrome «просто работает». Например, следующий фрагмент html создает форму, которая, по крайней мере для меня (Chrome v. 18), автоматически заполняется после нажатия в первом поле:
<!DOCTYPE html>
<html>
<body>
<form method="post">
First name:<input type="text" name="fname" /><br />
Last name: <input type="text" name="lname" /><br />
E-mail: <input type="text" name="email" /><br />
Phone: <input type="text" name="phone" /><br />
Address: <input type="text" name="address" /><br />
</form>
</body>
</html>
Однако этот ответ является неудовлетворительным, поскольку оставляет решение в сфере «магии». Углубившись вглубь, я узнал, что Chrome (и другие браузеры с автозаполнением) в основном полагаются на контекстные подсказки, чтобы определить тип данных, которые должны быть заполнены в элементах формы. Примеры таких контекстных подсказок включают name
элемент ввода, текст, окружающий элемент, и любой текст-заполнитель.
Однако недавно команда Chrome признала, что это неудовлетворительное решение, и начала настаивать на стандартизации в этом вопросе. Очень информативное сообщение от группы Google Webmasters недавно обсуждало эту проблему, объясняя:
К сожалению, до сих пор веб-мастерам было сложно обеспечить, чтобы Chrome и другие поставщики форм могли правильно анализировать свою форму. Существуют некоторые стандарты; но они накладывают тяжелое бремя на реализацию веб-сайта, поэтому они практически не используются на практике.
(«Стандарты», на которые они ссылаются, являются более поздней версией спецификации, упомянутой в ответе Avalanchis выше.)
Пост Google продолжает описывать предложенное им решение (что встречается с серьезной критикой в комментариях к посту). Они предлагают использовать для этой цели новый атрибут:
Просто добавьте атрибут к элементу ввода, например, поле адреса электронной почты может выглядеть так:
<input type=”text” name=”field1” x-autocompletetype=”email” />
... где x-
обозначает "экспериментальный" и будет удален, если и когда это станет стандартом. Прочтите этот пост для получения более подробной информации, или, если вы хотите углубиться, вы найдете более полное объяснение предложения в вики-сайте whatwg .
ОБНОВЛЕНИЕ:
Как указано в этих проницательных ответах , все регулярные выражения, которые Chrome использует для идентификации / распознавания общих полей, можно найти в autofill_regex_constants.cc.utf8
. Поэтому, чтобы ответить на исходный вопрос, просто убедитесь, что имена ваших HTML-полей соответствуют этим выражениям. Вот некоторые примеры:
- Имя:
"first.*name|initials|fname|first$"
- Фамилия:
"last.*name|lname|surname|last$|secondname|family.*name"
- Эл. адрес:
"e.?mail"
- Адресная строка 1):
"address.*line|address1|addr1|street"
- почтовый индекс:
"zip|postal|post.*code|pcode|^1z$"
Этот вопрос довольно старый, но у меня есть обновленный ответ !
Вот ссылка на документацию WHATWG для включения автозаполнения.
Google написал довольно приятное руководство по разработке веб-приложений, удобных для мобильных устройств. У них есть раздел о том, как назвать входные данные в формах, чтобы легко использовать автозаполнение. Несмотря на то, что он написан для мобильных устройств, он применим как для настольных компьютеров, так и для мобильных устройств!
Как включить автозаполнение в HTML-формах
Вот несколько ключевых моментов о том, как включить автозаполнение:
<label>
для всех ваших<input>
полейautocomplete
атрибут к своим<input>
тегам и заполните его, используя это руководство .name
иautocomplete
атрибуты правильно для всех<input>
теговПример :
Как назвать ваши
<input>
тегиДля того , чтобы вызвать автозаполнения, убедитесь , что вы правильно назвать
name
иautocomplete
атрибуты в ваших<input>
тегах. Это автоматически разрешит автозаполнение в формах. Не забудьте также иметь<label>
! Эту информацию также можно найти здесь .Вот как назвать ваши входные данные:
name
:name fname mname lname
autocomplete
:name
(для полного имени)given-name
(для имени)additional-name
(для второго имени)family-name
(для фамилии)<input type="text" name="fname" autocomplete="given-name">
name
:email
autocomplete
:email
<input type="text" name="email" autocomplete="email">
name
:address city region province state zip zip2 postal country
autocomplete
:street-address
address-line1
address-line2
address-level1
(штат или провинция)address-level2
(город)postal-code
(почтовый индекс)country
name
:phone mobile country-code area-code exchange suffix ext
autocomplete
:tel
name
:ccname cardnumber cvc ccmonth ccyear exp-date card-type
autocomplete
:cc-name
cc-number
cc-csc
cc-exp-month
cc-exp-year
cc-exp
cc-type
name
:username
autocomplete
:username
name
:password
autocomplete
:current-password
(для форм входа)new-password
(для регистрации и смены пароля)Ресурсы
источник
Из моего тестирования
x-autocomplete
тег ничего не делает. Вместо этого используйтеautocomplete
теги для своих входных тегов и установите их значения в соответствии со спецификацией HTML здесь http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms. html # autofill-field .Пример:
Для родительского тега формы требуется autocomplete = "on" и method = "POST".
источник
on
,off
илиdefault
. Так что это неправильная разметка и будет склонна к несоответствиям. Я на самом деле думаю, что размещение в атрибуте автозаполнения не имеет значения. Я предполагаю, что он смотрит на все атрибуты, и автозаполнение оказывается одним из тех, которые он проверяет.Вам нужно правильно назвать элементы, чтобы браузер автоматически их заполнил.
Вот спецификация IETF для этого:
http://www.ietf.org/rfc/rfc3106.txt 1
источник
Я просто поработал со спецификацией и получил хороший рабочий пример - включая еще несколько полей.
JSBIN
Он содержит 2 отдельные адресные области, а также разные типы адресов. Протестировал его также на iOS 8.1.0 и кажется, что он всегда заполняет все поля сразу, а настольный Chrome автоматически заполняет адрес по адресу.
источник
Похоже, мы получим больше контроля над этой функцией автозаполнения, в Chrome Canary появится новый экспериментальный API, который можно использовать для доступа к данным после запроса у пользователя:
http://www.chromium.org/developers/using-requestautocomplete http://blog.alexmaccaw.com/requestautocomplete
новая информация от Google:
http://googlewebmastercentral.blogspot.de/2015/03/helping-users-fill-out-online-forms.html
https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs#use-metadata-to-enable-auto-complete
источник
Вот это реальный ответ:
Это работает: http://jsfiddle.net/68LsL1sq/1/
<label for="name">Nom</label>
Это не: http://jsfiddle.net/68LsL1sq/2/
<label for="name">No</label>
Разница лишь в самой этикетке. «Ном» происходит от «Имени» или «Нома» на португальском языке.
Итак, вот что вам нужно:
<label for="id_of_field">Name</label>
<input id="id_of_field"></input>
Ничего более.
источник
Вот новый список автозаполнений Google "имена". Есть все поддерживаемые имена на любом разрешенном языке.
autofill_regex_constants.cc
источник
Google теперь предоставляет документацию для этого:
Помогите пользователям быстрее оформить заказ с помощью автозаполнения | Веб | Разработчики Google
и
Создание удивительных форм: используйте метаданные для включения автозаполнения | Веб | Разработчики Google
источник
В моем случае
$('#EmailAddress').attr('autocomplete', 'off');
не сработало. Но следующие работы на Chrome версии 67 от jQuery.источник