Kuidas luua Datalisti, mis on kohe otsitav
Loendist loendid on korralik viis võimalusi sisendvälja jaoks, eriti kui võimalike valikute loend on pikk. Kasutaja saab valida soovitud variandi kirjuta väljale, või vaadake võimalusi see võib sobida sellega, mida nad otsivad. Võimalus otsida võimalusi, on aga ideaalne lahendus.
Seda käitumist on võimalik saavutada HTML-element seda kuvab sisendettepanekuid erinevate juhtimisseadiste puhul, näiteks
silt. Kuid
näitab ainult olemasolevaid valikuid, kui kasutaja on juba kirjutanud midagi sisendväljale.
Saame sisendvälja rohkem kasutada, kui lubame kasutajatel juurdepääsuvõimalustele sisendprotsessi ajal.
Selles postituses näeme, kuidas luua a rippmenüü, mis on igal ajal otsitav kasutades ja
HTML-elemendid ja väike JavaScript.
1. Looge valikuga Datalist
Esiteks loome erinevate tekstiredaktorite jaoks datalisti. Veenduge, et nimekirja
atribuut silt on sama nagu the
id
selle tag - see, kuidas me neid üksteisega sidume.
2. Tee Datalist nähtavaks
Vaikimisi on HTML-element on peidetud. Me näeme seda ainult siis, kui me alustage sisendi sisestamist põllule, on datalist lisatud.
Siiski on olemas viis, kuidas datalisti sisu sundida (s.t kõik selle valikud) veebilehel. Me peame andma sellele vaid sobiva kuva
vara väärtus muud kui mitte ükski
, näiteks kuva: plokk;
.
datalist kuva: plokk;
Kuvatud valikud pole veel valitavad sel hetkel ainult brauser muudab valikud see leiab aset datalisti sees.
Nagu eelpool mainitud, on. \ T element, osa valikuvõimalustest on juba olemas ja neid saab valida, kuid ainult siis, kui kasutaja hakkab kirjutama stringi, millele brauser saab leidke sobiv valik.
Samuti peame leidma mehhanismi kõik valikud (ülaltoodud ekraanil kuvatakse rippmenüü all) valitav juures mis tahes muu sisendi võtmise punkti - kui kasutajad tahavad enne valiku tegemist suvandeid kontrollida või kui nad on juba võtnud midagi sisendväljale.
3. Tooge
HTML-element
Kasutajatele lubamiseks on kaks võimalust vaata ja vali kõik valikud kui nad soovivad:
- Me võime lisada a klõpsa sündmuste käitlejale igale valikule ja kasutage seda suvandi valimiseks, kui seda klõpsatakse, või saame ka teisendada valikuid reaalsesse rippmenüüsse, mis on vaikimisi valitav.
- Me saame murdke valikud datalisti koos
HTML-element.
Me valime teise meetodi, kuna see on lihtsam ja seda on lubatud kasutada tagavaramehhanismina brauserites, mis seda ei toeta element. Kui brauser ei suuda datalisti näidata ja kuvada, siis see muudab
kõik selle võimalused selle asemel.
Vaikimisi on valige
element ei ilmu brauserites, mis toetavad datalisti, st kuni me sundida datalisti oma sisu esitama koos kuva: plokk;
CSS reegel.
Nii et kui me murdke valikud ülaltoodud näites (kus on datalist kuva: plokk
) koos HTML-silt, kood näeb välja allpool:
Et vaata kõiki valikuid of valige
rippmenüüst peame kasutama atribuute mitu
et kuvada rohkem kui üks valik ja suurus
nende valikute arvu kohta, mida soovime näidata.
4. Lisage lüliti nupp
Täielik rippmenüü peaks ilmuma ainult kui kasutaja klõpsab nupule sisestusvälja kõrval, samas kui kuvatakse kasutajate tüübid. Olgem muuda kuva
datalisti väärtus kuni mitte ükski
, ja ka lisage nupp sisendvälja kõrval, mis lülitab kuva
datalisti väärtust ja seega käivitada valige
.
datalist display: none;
Samuti peame HTML-faili datalisti kohal ülalnimetatud nupu lisama:
Nüüd vaatame JavaScripti. Esiteks määratleme esialgsed muutujad.
button = document.querySelector ('nupp'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Seejärel peame lisage sündmuste kuulaja (toggle_ddl
) nupu klikkimise sündmusele vahetada datalisti välimust.
button.addEventListener ('kliki', toggle_ddl);
Seejärel määratleme toggle_ddl ()
funktsiooni. Selleks peame kontrollige väärtust datalist.style.display
vara. Kui see on tühi string, on datalist peidetud, nii et me peame seda tegema määrake selle väärtus blokeeri
, ja ka nuppu muuta allapoole suunatud noolest ülespoole suunatud noole poole.
funktsioon toggle_ddl () / * kui DDL on peidetud * / kui (datalist.style.display === ") / * näita DDL * / datalist.style.display = 'plokk'; this.textContent =" âÂ-² "; else hide_select (); funktsioon hide_select () / * peida DDL * / datalist.style.display ="; button.textContent = "âÂ-¼";
The hide_select ()
funktsiooni peidab datalisti seadistades datalist.style.display
kinnisvara tühja stringi juurde ja nupu nool tagasi nihutada.
Lõplikus seadistuses, kui sisendväljadel on eelnevalt valitud suvand ja rippmenüü on käivitatud ka hilisema nupu klõpsuga, siis ka eelnevalt valitud valik tuleb näidata valitud kujul rippmenüüst.
Niisiis, lisame järgmine esiletõstetud kood toggle_ddl ()
funktsioon:
funktsioon toggle_ddl () / * kui DDL on peidetud * / kui (datalist.style.display === ") / * näita DDL * / datalist.style.display = 'plokk'; this.textContent =" âÂ-² "; var val = input.value; jaoks (var i = 0; iSamuti soovime varjata rippmenüü, kui kasutaja sisestab sisestusväljale (töötava datalisti ilmumise ajal).
/ * kui kasutaja soovib sisestada tekstivälja, peida DDL * / input = document.querySelector ("sisend"); input.addEventListener ('focus', hide_select);5. Värskendage sisendit, kui valik on valitud
Lõpuks, let's Lisa
muutus
sündmuste käitleja Euroopaet kasutaja valib rippmenüüst suvandi, kuvatakse selle väärtus
valdkonnas.
/ * kui kasutaja valib DDL-i suvandi, kirjutage see tekstiväljale * / select.addEventListener ('change', fill_input); funktsioon fill_input () input.value = valikud [this.selectedIndex] .value; hide_select ();Puudused
Selle tehnika peamine puudus on -. \ t
element CSS-ga (selle välimus)
ja
sildid erinevad erinevates brauserites).
Samuti on Firefoxis sisendtekst sobitatud võimalustega sisaldab sisestusmärgid, samas kui teised brauserid sobivad sellega algab neid märke. W3C spetsifikatsioon datalisti jaoks ei täpsusta täpselt, kuidas sobitamine peaks toimuma.
Peale selle on see meetod hea ja töötab kõikides suuremates brauserites, arvestades, et brauserites, kus see ei pruugi toimida, näevad kasutajad ikka veel rippmenüüd, ainult soovitused ei ilmu.
Vaadake lõplikku demot, millel on natuke CSS-stiili: