AKTUALIZACJA na rok 2017: Wygląda na to, że odpowiedź Katie zawiera więcej aktualnych informacji niż moja. Przyszli czytelnicy: oddaj głos na jej odpowiedź .
To świetne pytanie, dla którego dokumentacja jest zaskakująco trudna do zdobycia. W rzeczywistości w wielu przypadkach okaże się, że funkcja autouzupełniania Chrome „po prostu działa”. Na przykład następujący fragment kodu HTML tworzy formularz, który przynajmniej dla mnie (Chrome w. 18) jest automatycznie wypełniany po kliknięciu pierwszego pola:
<!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>
Jednak ta odpowiedź jest niezadowalająca, ponieważ pozostawia rozwiązanie w dziedzinie „magii”. Głębsze kopanie Dowiedziałem się, że Chrome (i inne przeglądarki z włączonym autouzupełnianiem) polegają przede wszystkim na wskazówkach kontekstowych w celu określenia rodzaju danych, które należy wypełnić w elementach formularza. Przykłady takich wskazówek kontekstowych obejmują name
element wejściowy, tekst otaczający element i dowolny tekst zastępczy.
Jednak ostatnio zespół Chrome przyznał, że jest to niezadowalające rozwiązanie, i zaczęli nalegać na standaryzację w tej sprawie. Bardzo pouczający post z grupy Google Webmasters ostatnio omawiał ten problem, wyjaśniając:
Niestety do tej pory webmasterzy mieli trudności z zapewnieniem, że Chrome i inni dostawcy wypełniania formularzy mogą poprawnie parsować swoje formularze. Istnieją pewne standardy; ale nakładają ciężkie obciążenia na wdrożenie strony internetowej, więc nie są one często stosowane w praktyce.
(„Standardy”, do których się odnoszą, to najnowsza wersja specyfikacji wymienionej w odpowiedzi Avalanchisa powyżej).
W dalszej części posta Google opisano ich proponowane rozwiązanie (co spotkało się z poważną krytyką w komentarzach do postu). Proponują użycie nowego atrybutu do tego celu:
Wystarczy dodać atrybut do elementu wejściowego, na przykład pole adresu e-mail może wyglądać następująco:
<input type=”text” name=”field1” x-autocompletetype=”email” />
...gdzie x-
oznacza „eksperymentalny” i zostanie usunięty, jeśli i kiedy stanie się standardem. Przeczytaj post, aby uzyskać więcej informacji, lub jeśli chcesz kopać głębiej, znajdziesz pełniejsze wyjaśnienie propozycji na wiki whatwg .
AKTUALIZACJA:
Jak wskazano w tych wnikliwych odpowiedziach , wszystkie wyrażenia regularne używane przez Chrome do identyfikowania / rozpoznawania wspólnych pól można znaleźć autofill_regex_constants.cc.utf8
. Aby odpowiedzieć na pierwotne pytanie, upewnij się, że nazwy pól HTML są zgodne z tymi wyrażeniami. Niektóre przykłady obejmują:
- Imię:
"first.*name|initials|fname|first$"
- nazwisko:
"last.*name|lname|surname|last$|secondname|family.*name"
- e-mail:
"e.?mail"
- adres (wiersz 1):
"address.*line|address1|addr1|street"
- kod pocztowy:
"zip|postal|post.*code|pcode|^1z$"
To pytanie jest dość stare, ale mam zaktualizowaną odpowiedź !
Oto link do dokumentacji WHATWG w celu włączenia autouzupełniania.
Google napisał całkiem niezły przewodnik do tworzenia aplikacji internetowych przyjaznych dla urządzeń mobilnych. Mają sekcję na temat nazewnictwa danych wejściowych w formularzach, aby łatwo korzystać z automatycznego wypełniania. Chociaż napisano to na urządzenia mobilne, dotyczy to zarówno komputerów stacjonarnych, jak i mobilnych!
Jak włączyć autouzupełnianie w formularzach HTML
Oto kilka kluczowych punktów, jak włączyć autouzupełnianie:
<label>
dla wszystkich swoich<input>
pólautocomplete
atrybut do swoich<input>
tagów i wypełnij go, korzystając z tego przewodnika .name
iautocomplete
atrybuty poprawnie dla wszystkich<input>
tagówPrzykład :
Jak nazwać swoje
<input>
tagiAby uruchomić autouzupełnianie, upewnij się, że poprawnie nazywasz
name
iautocomplete
atrybuty w<input>
tagach. Umożliwi to automatyczne uzupełnianie formularzy. Upewnij się także, aby mieć<label>
! Informacje te można również znaleźć tutaj .Oto jak nazwać swoje dane wejściowe:
name
:name fname mname lname
autocomplete
:name
(pełne imię i nazwisko)given-name
(na imię)additional-name
(dla drugiego imienia)family-name
(dla nazwiska)<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
(stan lub prowincja)address-level2
(Miasto)postal-code
(kod pocztowy)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
(w przypadku formularzy logowania)new-password
(w przypadku formularzy rejestracji i zmiany hasła)Zasoby
źródło
Z moich testów
x-autocomplete
tag nic nie robi. Zamiast tego użyjautocomplete
znaczników na znacznikach wejściowych i ustaw ich wartości zgodnie ze specyfikacją HTML tutaj http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms. html # pole autouzupełniania .Przykład:
Nadrzędny znacznik formularza wymaga autocomplete = „on” i method = „POST”.
źródło
on
,off
lubdefault
. To jest nieprawidłowa marża i będzie podatna na niespójności. Myślę, że umieszczenie w atrybucie autouzupełniania jest nieistotne. Sądzę, że wygląda na wszystkie atrybuty, a autouzupełnianie jest jednym z tych, które sprawdza.Musisz odpowiednio nazwać elementy, aby przeglądarka je automatycznie wypełniła.
Oto specyfikacja IETF:
http://www.ietf.org/rfc/rfc3106.txt 1
źródło
Po prostu grałem ze specyfikacją i otrzymałem dobry przykład działania - w tym kilka innych dziedzin.
JSBIN
Zawiera 2 oddzielne obszary adresowe, a także różne typy adresów. Przetestowałem to również na iOS 8.1.0 i wygląda na to, że zawsze wypełnia wszystkie pola jednocześnie, a adres autouzupełniania chrome na pulpicie według adresu.
źródło
Wygląda na to, że uzyskamy większą kontrolę nad tą funkcją autouzupełniania, na Chrome Canary pojawi się nowy eksperymentalny interfejs API, którego można użyć do uzyskania dostępu do danych po zapytaniu użytkownika:
http://www.chromium.org/developers/using-requestautocomplete http://blog.alexmaccaw.com/requestautocomplete
nowe informacje od 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
źródło
Oto prawdziwa odpowiedź:
Działa to: http://jsfiddle.net/68LsL1sq/1/
<label for="name">Nom</label>
To nie: http://jsfiddle.net/68LsL1sq/2/
<label for="name">No</label>
Jedyną różnicą jest sama etykieta. Nazwa „Nom” pochodzi od „Name” lub „Nome” w języku portugalskim.
Oto, czego potrzebujesz:
<label for="id_of_field">Name</label>
<input id="id_of_field"></input>
Nic więcej.
źródło
Oto nowa lista „nazw” autouzupełniania Google. Istnieją wszystkie obsługiwane nazwy w dowolnym dozwolonym języku.
autofill_regex_constants.cc
źródło
Google udostępnia teraz dokumentację dotyczącą tego:
Pomóż użytkownikom szybciej realizować transakcje dzięki Autouzupełnianiu | Internet | Google Developers
i
Utwórz niesamowite formularze: użyj metadanych, aby włączyć automatyczne uzupełnianie | Internet | Google Developers
źródło
W moim przypadku
$('#EmailAddress').attr('autocomplete', 'off');
nie działa. Ale następujące prace działają na chromie w wersji 67 autorstwa jQuery.źródło