Většina současných prohlížečů nabízí uživatelům ukládat si nejen hesla, ale i svou poštovní a emailovou adresu, telefonní čísla i čísla kreditních karet.
Aby ale mohl uživatel takové informace vyplnit do vaší stránky, musí váš formulář splňovat některá pravidla (z W3C specifikace).
Form autocomplete
Většina webařů a HTML kodérů zná atribut autocomplete jako vlastnost formuláře, pomocí které můžete zakázat nebo povolit, aby se údaje vyplňovali, k čemuž slouží hodnoty ON a OFF.
Ty lze samozřejmě používat, ale atribut autocomplete může (u inputu) obsahovat celou řadu informací o tom, co v poli očekáváte, a prohlížeč pak může automaticky formulář vyplnit.
<form autocomplete=on>
<input name=name autocomplete=name>
<texarea autocomplete=street-address>
</textarea>
<input name=zip autocomplete=postal-code">
</form>
Poznámka: hodnoty atributu autocomplete jsou case-insensitive, což znamená, že můžete psát malá a velká písmena, jak vám přijde vhodné. Hodnoty ale používají kebab-case, takže slova jedné hodnoty jsou oddělena pomlčkou. Mezerou se oddělují jednotlivé hodnoty (viz dále).
Typy polí
Nepleťte si to s input type, atribut autocomplete určuje obsah dat a nikoliv jejich formát (i když částečně taky):
Offznamená, že hodnota pole je důvěrná (třeba rodné číslo), obsahuje jednorázovou hodnotu (např. aktivační kód) nebo s daty nesouvisí (captcha). Do takového pole se nesmí nic automaticky vyplňovat a ani se hodnota nesmí ukládat. Navíc po přechodu na další stránku se musí hodnota vymazat, aby v poli nezůstala poté, co uživatel klikne na Zpět. Tuhle hodnotu byste měli používat skutečně jen v nutných případech. Používat ji proto, aby musel uživatel pokaždé zadat heslo, je nesmysl, protože nevíte, jak má uživatel vyplnění hesla zabezpečeno (dnes není problém zabezpečit ho otiskem prstu nebo skenem duhovky přes mobil nebo notebook)Onurčuje obecný údaj, který je možno uložit a při opakované návštěvě znovu vyplnit. Takové pole ale není možno automaticky vyplnit z předem připravených údajů (např. zapamatované adresy a čísla kreditních karet). Prohlížeč ale nemusí být schopen takové pole správně vyplnit v případě, že formulář obsahuje více podobných polí nebo se v budoucnu změnínameaidtakového pole.Nameurčuje celé jméno osoby, včetně všech titulů před a za jménem. Mělo by být vyplněno v jedné řádce s mezerami (tedy bez odřádkování)given-name,additional-nameafamily-nameodpovídají českému prvnímu (křestnímu) a druhému (prostřednímu) jménu a příjmení (surname). V jiných jazycích ale mohou mít trochu jiný význam (např. u Kim Chong Un jegiven=Un,additional=Chong,family=Kim).honorific-prefixahonorifix-suffixpak udávají tituly před a za jménem. U některých jazyků je potřeba dávat pozor, protože může definovat jak akademický titul (např. Mgr., Bc., apod.) ale i oslovení (Mr.) nebo pořadí (Senior, Junior, III., atd.)usernameanicknameurčují uživatelské jméno, kdeusernameje přímo přihlašovací jméno (např. honza99), zatímconicknameje přezdívka (např. Honzík) tam, kde se uživatelé hlásí emailem (pak email odpovídáusername), rodným číslem, apod. (nebo vůbec nejde o přihlašování).- S uživatelem ještě obvykle souvisí
sex(pohlaví) abday(datum narození). Pohlaví může být jakýkoliv text a W3C nijak neurčuje, co budete považovat za pohlaví (příp. i sexuální orientaci, apod.). Naopak den narození musí mít tvaryyyy-mm-dd(samozřejmě ve správných rozsazích) a být vyplněn do poletextnebodate. V případně, používáte číselná pole (numbernebotext), je můžete označitbday-day,bday-monthabday-year. current-passwordanew-passwordoznačují pole pro heslo (ve spojení susername) přičemžcurrent-passwordje pro stávající heslo (přihlášení nebo ověření totožnosti) anew-passwordje určeno pro registraci (první zadání) nebo změnu hesla.organizationaorganization-titleoznačují jméno společnosti (firmy) a pozice osoby v rámci dané firmy. Mohou se používat buď v adrese (objednávka na firmu a kontaktní osoba) nebo v informacích o osobě (zaměstnání a zaměstnavatel).Organization-titlemůže být např. „CEO“, „Software engineer“ nebo „Operátor výroby“.street-addressudává místní adresu včetně odřádkování (vyžaduje tedytextarea). Alternativně můžete použítaddress-lineX, kdeXje 1 až 3 a určujestreet-namerozdělené na řádky. Rozdělení na řádky nemá žádné bližší určení a záleží na situaci (zda první řádek je ulice a číslo, jméno budovy či skladu uvnitř většího areálu, nebo něco jiného). Nicméně toto pole by mělo určovat přímo budovu (Náměstí míru 155/3) nebo uzavřenou oblast (Tovární 1, sklad 35) a příp. další určení (5. patro, dveře 8, recepce, apod.)- Naopak
address-levelX(kde X je 1 až 4) určuje oblastní správní celky v rámci daného státu. Level 1 je nejrozsáhlejší a obvykle určuje stát (např. Texas nebo Bavorsko) nebo kraj (Vysočina, Košický kraj, Malopolska, apod.). Level 2 je obvykle město, ale může jít o oblast, která má společnou doručovací poštu. Level 3 a level 4 pak jsou např. městské části, místní název (Pankrác, Nad jezem, apod.). Jaká pole zobrazit byste měli určovat dynamicky podle státu (viz dále). - postal-code pak určuje poštovní směrovací číslo v uznávaném formátu (234 23, W23-123, apod.)
countryacountry-nameurčuje zkratku (ISO kód alpha-2) a jméno země, buď z adresy nebo i samostatně.Country-namemůže obsahovat jakoukoliv definici, třeba Česká Republika, Česko, ČR, CZE, apod. Souvisejícílanguagepak může obsahovat kód jazyka (BCP47).- Pro další určení adresy nebo informací o uživateli můžete použít
url(webowá stránka),photo(URL fotky, loga firmy nebo avataru),emailneboimpp(textové nebo telefonní služby jako Skype, IRC, apod.) - Pro telefon slouží
tel, což je číslo v mezinárodním formátu, ale existují i podkategorie, např.tel-country-codeatel-national) - Další kódy pak souvisí s platbou a začínají
cc-*(Credit Card). Hodnotycc-name,cc-number,cc-expacc-cscurčují informace z karty (jméno, číslo karty, datum expirace a kontrolní kód). Hodnotucc-namelze rozdělit stejně jakoname(kroměhonorific-*) acc-explze zadat jakocc-exp-monthacc-exp-year. Dále můžete použít ještěcc-typepro určení typu karty (např. VISA). - Pro platby, kde není předem dána částka (např. dary, sázky, aukce, apod.), můžete použít
transaction-currencyatransaction-amountpro určení měny (ISO4217) a částky (celé nebo desetinné číslo).
U hodnot, kde to dává smysl, můžete pro jeden input určit i více hodnot stejného nebo podobného typu. Např. autocomplete="given-name family-name" může obsahovat současně jméno i příjmení; autocomplete="tel tel-national tel-local" může obsahovat telefonní číslo buď v mezinárodní, národní nebo místním formátu; autocomplete="tel email impp" může obsahovat jakýkoliv kontaktní údaj.
U údajů, které mají předem očekávané hodnoty (např. country-name, tel-country-code, language, apod. můžete atribut použít i na select. Prohlížeč pak může automaticky vybrat hodnotu, která odpovídá jeho uloženému údaji.
Typ kontaktu
U kontaktních údajů tel (včetně všech tel-*), email a impp můžete doplnit klíčové slovo podle toho, jaký kontakt očekáváte:
homeoznačuje osobní kontakt. U telefonního čísla nemusí přímo označovat pevnou linku, ale jakékoliv číslo, které vlastní daná osoba.worknaopak označuje pracovní kontakt jako je emailová adresa firmy (info@company.com) nebo skupiny (hr@company.com). Měl by označovat kontakt, na který může daná osoba reagovat pouze v pracovní době.mobilepak označuje jakýkoliv kontakt, který můžete použít kdykoliv nezávisle na tom, zda je daná osoba doma, v práci nebo na cestách.- Pro telefonní číslo pak ještě můžete použít
faxapager.
<form autocomplete=on>
<input type=email autocomplete="work email">
<input type=tel autocomplete="mobile tel-national">
</form>
Adresy
Ve spojení s výše uvedenými hodnotami (adresa, telefon, jméno firmy, atd.) můžete použít klíčová slova shipping nebo billing, čímž určíte, zda se jedná o adresu nebo kontakt pro doručení zásilky nebo kontakt pro platbu.
Nejde přitom čistě o potřebu rozlišit dvě adresy v jednom objednávkovém formuláři (k tomu slouží sekce, viz dále), ale o to, k čemu budete kontakt používat. Pokud jde např. o adresu, u shipping adresy je důležité, aby šlo o fyzickou adresu, na kterou je možné něco doručit, někam přijet a dá se očekávat, že tam v danou dobu někdo bude – může jít třeba o adresu vaší chaty, pokud objednáváte instalatéra, firemní P.O.Box, pokud jde o doručení poštovní zásilky, apod. Naopak u billing údaje je důležité aby se přímo vztahoval k dané osobě např. za účelem zjištění, jaké DPH je potřeba odvést, nebo jak se má nakládat s osobními údaji.
Sekce
Pokud máte v jednom formuláři více stejných nebo podobných polí (např. adresy pro doručení zboží a faktury), telefonní číslo do vrátnice a do kanceláře, apod. můžete do atributu autocomplete zadat hodnotu section-* následovanou libovolným identifikátorem. Prohlížeč pak automaticky rozdělí pole do skupin podle identifikátorů.
Například pokud máte formulář pro objednání kurýra, budete potřebovat tři různé adresy a telefonní čísla:
<form autocomplete=on>
<input type=name
autocomplete="section-sender name">
<input type=tel
autocomplete="section-sender tel">
<textarea autocomplete="section-sender
street-address postal-code">
<input type=name
autocomplete="section-pick-up name">
<input type=tel
autocomplete="section-pick-up tel">
<textarea autocomplete="section-sender
street-address postal-code">
<input type=name
autocomplete="section-deliver name">
<input type=tel
autocomplete="section-deliver tel">
<textarea autocomplete="section-deliver
street-address postal-code">
</form>
Následně pak nezáleží na tom, v jakém pořadí budou pole ve formuláři, a prohlížeč vždy správně vyplní jména, adresy a telefonní čísla všech tří osob.
Skryté prvky
U viditelných inputů typu text, number, atd. hodnota autocomplete určuje, jakou hodnotu bude uživatel vyplňovat (autofill expectation mantle) a co mu má tedy prohlížeč nabídnout (aby u pole name nenabízel jméno ulice).
Autocomplete ale můžete použít i u skrytých prvků (input type=hidden), což ale neznamená, že vám do nich prohlížeč něco vyplní. Naopak to znamená, že pokud bude chtít údaje z vašeho formuláře uložit pro pozdější použití, může si uložit i další údaje, které mu vy poskytnete (autofilll anchor mantle).
Např. do formuláře pro změnu hesla můžete přidat skrytý input s hodnotou username, aby prohlížeč věděl, u kterého účtu je potřeba aktualizovat heslo (z hodnoty current-password na new-password).
U formuláře, kde uživatel zadává číslo kreditní karty (cc-*) můžete přidat skrytá pole transaction-amount a transaction-currency a prohlížeč pak třeba nebude nabízet uložené karty, u kterých je nastavený limit nižší než vaše požadovaná částka (pokud prohlížeč takový údaj zná).
Pokud máte formulář, kam uživatel zadá IČO a vy automaticky doplníte informace o firmě z registru, můžete tyto informace poskytnout ve skrytých inputech, aby si je mohl prohlížeč uložit a použít na jiných stránkách, které tuto funkčnost nemají (vy tím samozřejmě nic nezískáte, ale zlepšujete tím komfort svých uživatelů).
I skryté prvky samozřejmě mohou (resp. by měli) definovat sekci, ke které patří, pokud jsou použity ve formuláři.