Filtrování většího počtu záznamů pomoci JavaScriptu
Občas se stane, že v situaci, kdy v rámci jedné WWW stránky návštěvník vybírá z několika desítek hodnot, potřebujeme na tyto hodnoty uplatnit uživatelsky ovládaný filtr pro zlepšení orientace. Tento článek ukazuje jednu z možností, jak toho dosáhnout bez zatěžování serverového skriptu: stačí k tomu dvojice polí SELECT a obslužný JavaScript.
Nejprve ukázka. V následující tabulce jsou vypsány nejrůznější potraviny. Výběrem v horním rozbalovacím seznamu můžeme dolní seznam omezit na vybranou podmnožinu:
Skript je psán tak, aby každá z položek dolního seznamu mohla být členem jedné podmnožiny (např. „Mouka“), více podmnožin (oblíbené „Rajče“) nebo žádné podmnožiny („Cukr“). Každé z položek je dále přiřazeno identifikační číslo, které sice uvedený skript sám o sobě nevyužívá, lze jej však použít v dalším zpracování, například po odeslání objednávky jako výrobní číslo (jsou-li rajčata opatřena výrobními čísly).
Hlavní částí skriptu je definice objektu MeFilter, ktzerá je poměrně dlouhá, probereme si ji proto po částech. Nejprve hlavička objektu a inicializace proměnných:
|
Do členské proměnné instanceName je ukládáno jméno vytvořené instance objektu MeFilter – toto využijeme dále při obsluze událostí připojeného formuláře. První trojice polí (spolu s proměnnou iLength, udávající jejich délku), slouží k uložení jednotlivých položek dolního seznamu – v našem případě tedy potravin. arrIDs uchovává výše zmíněná identifikační čísla, arrNames jména, která se zobrazí v dolním seznamu, arrFlags řetězce – seznamy jednoznakových příznaků, které určují zařazení příslušné položky do podskupin. Tak si můžeme nadefinovat libovolný počet vlastních podskupin (ty jsou posléze vypsány v horním rozbalovacím seznamu) a k nim přiřadit jednotlivé položky z dolního seznamu. Konkrétní ukázka definice podskupin a položek je uvedena níže.
Druhá dvojice polí slouží právě k uložení seznamu podskupin. arrIDsF uchovává ID (tedy onen jednoznakový příznak) dané podskupiny, arrNamesF uchovává jména, zobrazená v horním rozbalovacím seznamu.
V definici objektu dále následuje dvojice metod, které do právě popsaných členských proměnných přidávají buď položku z dolního seznamu (metoda Add) nebo definují podskupinu (metoda AddFlag). Protože jde o triviální úkol, uvedeme si pouze kód těchto dvou metod bez dalšího vysvětlení:
|
Následuje metoda WriteTable, jež je volána z příslušného místa WWW stránky s účelem vypsat malou tabulku s dvojicí polí (horní se seznamem podskupin, dolní se seznamem položek) a naplnit tato pole výchozími hodnotami. Opět jde, i přes délku funkce, jen o jednoduché volání document.write, za zmínku stojí snad jen provázání formuláře s obslužným kódem – všimněte si handleru události onChange v horním poli SELECT:
|
Z tohoto handleru je volána následující metoda, FilterIt, která provede vlastní filtrování obsahu dolního pole. Přijímá dva parametry, prvním je objekt horního pole SELECT (z něj zjistíme, která podmnožina byla vybrána), druhým je objekt dolního seznamu. Tento seznam metoda nejprve vyprázdní (volání DeleteSelect) a poté do něj zpětně vypíše všechny položky, které odpovídají vybranému seznamu, jinými slovy všechny ty, které ve svém příslušném řetězci arrFlags obsahují znak-příznak, odpovídající vybrané podskupině:
|
Poslední metodou objektu je metoda DeleteSelect, která, jak již bylo řečeno, vyprazdňuje pole SELECT, předané jí jako parametr. Za kódem samotné funkce následuje jedna pravá složená závorka navíc jako ukončení definice celého objektu MeFilter:
|
Nyní je potřeba vytvořit instanci objektu MeFilter a tuto (pomocí série volání metod Add, případně AddFlag, naplnit hodnotami. V tomto článku byl použit následující kód (všimněte si vždy třetího parametru metody Add, řetězce, jehož jednotlivé znaky odpovídají dříve definovaným podskupinám – O jako Ovoce, P jako suroviny na pizzu atp.):
|
Posledním úkolem je „někde“ v HTML stránce vytvořit kostru formuláře a do ní, voláním metody WriteTable, vypsat tabulku s dvojicí polí SELECT. Formulář může být, a asi většinou i bude, samozřejmě rozsáhlejší než zde níže uvedený minimální tvar:
|
Tolik ke kódu, co se týká využití, lze objevit množství nejrůznějších aplikací, namátkou výběr města podle okresu či kraje, náhradního dílu dle stroje, odpovědného pracovníka dle oboru činnosti atd. atd. (dle fantazie).
Přeji vám příjemný den.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Jak nainstalovat šablonu ve WordPressu
23. července 2024 -
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024