přejít na obsah přejít na navigaci

Linux E X P R E S, jQuery (25) – automatické doplňování v jQuery UI

jQuery (25) – automatické doplňování v jQuery UI

jquery.png

Automatické doplňování textových polí velmi zpříjemňuje a usnadňuje práci. Pojďme se podívat, jak se používá v jQuery UI.


Textové pole je základ

Přestože s HTML5 přišly i další možnosti pro vstup dat ve formulářích, implementace v prohlížečích není ani dnes stoprocentní. Navíc ne vždy „systémové“ řešení vyhovuje a především ne všechny potřebné druhy vstupních prvků jsou součástí specifikace. Proto stále zůstává základem textové pole, na které se navazuje další funkcionalita.

Výhodou tohoto řešení je také to, že i s vypnutým JavaScriptem formulář funguje, byť ne tak komfortně.

Automatické doplňování

S automatickým doplňováním se dnes setkáváme zcela běžně – počínaje adresním řádkem webového prohlížeče, přes různé vyhledávače, až třeba po pole pro vložení PSČ. Data mohou být k dispozici přímo ve formuláři, nebo je lze získávat až během psaní.

Typicky to funguje tak, že při dosažení určité délky napsaného textu a po vypršení prodlevy od napsání posledního znaku se zobrazí nabídka, z níž si lze vybrat, co se do pole vloží. Pokud uživatel nevloží nic a píše dál, nabídka se postupně aktualizuje.

Widget Autocomplete

V jQuery UI je pro automatické doplňování k dispozici widget Autocomplete. Nabízí vše potřebné k realizaci této funkcionality, včetně potřebné interakce s klávesnicí a myší. V kódu HTML potřebujeme mít textové pole:

<input type="text" name="city" id="city">

Uvedené pole bude sloužit k zadávání města. Pro usnadnění uživateli nabídneme největší česká města, která se budou často používat. Javascriptový kód může vypadat například takto:

var props = {
   source: ['Praha', 'Brno', 'Ostrava', 'Plzeň', 'Hradec Králové', 'Ústí nad Labem', 
		'Liberec']
 };
 $('#city').autocomplete(props);

Zobrazení nabídky k automatickému doplnění do textového pole Zobrazení nabídky k automatickému
doplnění do textového pole

Předává se pouze seznam k automatickému doplnění, ostatní parametry zůstávají výchozí. Proto se nabídka zobrazí 300 ms od chvíle, kdy uživatel přestane psát a k zobrazení postačí jediný napsaný znak. V daném případě to bude zřejmě plně vyhovující. Někdy to ale můžeme chtít změnit:

var props = {
   source: …,
   minLength: 3,
   delay: 700
 };
 $('#city').autocomplete(props);

Větší minimální délka se hodí hlavně v případech, že je nabízených možností hodně a je potřeba je rozumně omezit, aby jejich nabídnutí mělo vůbec smysl. Delší prodleva se zase hodí v případech, kdy lze očekávat, že bude uživatel psát pomalu, nebo pokud se budou data načítat ze serveru (viz dále) a je žádoucí počet dotazů omezit.



Štítky pro hodnoty

Pokud se zadává například PSČ, může být vhodné u každé nabízené možnosti uvést další informaci (v případě PSČ je to dodací pošta). Ta se do pole po výběru nevloží a slouží jen pro orientaci uživatele – je to tzv. štítek. Místo obyčejného pole hodnot použijeme pole objektů:

var props = {
   source: [{ label: 'Bernartice', value: '257 65'}, { label: 'Bílkovice', 
		value: '257 26'}, …]
 };
 $('#city').autocomplete(props);

Využití štítků Využití štítků

V tomto případě ovšem nabízení hodnot funguje trochu jinak – do pole je potřeba psát texty, které lze vyhledat ve štítcích. Pokud je potřeba hledat i v samotných hodnotách, musí být ve štítcích obsaženy (například místo „Bernartice“ by se použilo „257 65 Bernartice“ apod.).

Načítání dat ze serveru

V mnoha případech je vhodnější (ne-li vůbec technicky jediné proveditelné) načítat data v reálném čase ze serveru, místo aby byla načtena předem s formulářem. Představme si třeba hledání v názvech zboží v internetovém obchodě, který může mít desetitisíce položek i více.

Načítání lze realizovat dvěma způsoby – buď se vše nechá na implementaci ve widgetu (což je doporučená cesta, pokud neexistuje nějaká překážka v jejím použití), nebo si to lze realizovat po svém. Využití implementace ve widgetu Autocomplete je velmi snadné:

var props = {
   source: '/search.php'
 };
 $('#city').autocomplete(props);

Výsledkem je, že se v okamžiku potřeby nabídnout data k vyplnění odešle na server požadavek metodou GET a k URL se přidá parametr „term“, v němž bude text napsaný uživatelem. Pokud uživatel napíše například „abc“, na server odejde požadavek na /search.php?term=abc. Widget od serveru očekává data ve formátu JSON, která budou vypadat jako ve výše uvedených příkladech.

Vrácená data mohou obsahovat jak samotné hodnoty, tak objekty se štítky a hodnotami. Požadavek může být odeslán jak na stejný server, tak i na jiný (ten ale musí podporovat JSONP).

Potřebujete-li realizovat požadavek na server nějak jinak, případně data nějak zpracovávat i místně, můžete místo URL použít funkci, která vykoná vše potřebné a po asynchronním zpracování vrácených dat zavolá callback response(). Podrobnosti najdete v dokumentaci.

Události a stylování

Při práci s Autocomplete lze reagovat na řadu událostí, například search, response nebo select. Bývá to potřeba málokdy, ale ta možnost tu je. Opět odkazuji na dokumentaci.

Co se týká vlastního stylování (standardně se používá výchozí podoba pro dané téma jQuery UI), jsou k dispozici CSS třídy ui-autocomplete (nabídka textů k doplnění) a ui-autocomplete-input (textové pole). Můžete si tedy upravit, co je potřeba.

Kalendář příště

Původně měl být součástí tohoto dílu i kalendář, nakonec jsem se ale rozhodl ho přesunout až do dílu příštího, protože si zaslouží dostatek prostoru. Pro tentokrát je to tedy vše a pro příště se můžete těšit na ten slíbený kalendář.

Nahoru

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Lukáš Jelínek

Lukáš Jelínek

Dlouholetý člen autorského týmu LinuxEXPRESu a OpenOffice.cz. Vystudoval FEL ČVUT v oboru Výpočetní technika. Žije v Kutné Hoře, podniká v oblasti IT a zároveň pracuje v týmu projektu Turris. Ve volném čase rád fotografuje, natáčí a stříhá video, občas se věnuje powerkitingu a na prahu čtyřicítky začal hrát tenis.


  • Distribuce: Debian, Kubuntu, Linux Mint
  • Grafické prostředí: KDE

| proč linux | blog