Tastaturnavigasjon i forslagslister
Håndter tastene ArrowUp, ArrowDown, Enter og Escape for å navigere og velge forslag uten mus.
Tastaturnavigasjon i forslagslister er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.
Håndtere onKeyDown på inndatafeltet
Knytt tastaturbehandleren til onKeyDown-hendelsen på inndataelementet, ikke til onKeyPress (avviklet) eller onKeyUp. keyDown utløses før tegnet vises i inndatafeltet, slik at ArrowDown, ArrowUp, Enter og Escape kan fanges opp før de får noen standardvirkning i nettleseren.
ArrowDown-tastens oppførsel
Når brukeren trykker på ArrowDown, økes selectedIndex med 1, begrenset til maksimum suggestions.length - 1: setSelectedIndex(prev => Math.min(prev + 1, suggestions.length - 1)). Kall også e.preventDefault() for å hindre at markøren flyttes til slutten av teksten i inndatafeltet, som er standardoppførselen for ArrowDown i tekstfelt.
ArrowUp-tastens oppførsel
Når brukeren trykker på ArrowUp, reduseres selectedIndex med 1, begrenset til minimum 0: setSelectedIndex(prev => Math.max(prev - 1, 0)). Det kan også velges å begrense til -1 (ingen markering) når brukeren går over indeks 0, slik at brukeren kan fjerne markeringen og gå tilbake til å skrive fritt.
Enter-tastens oppførsel
Når Enter trykkes og selectedIndex >= 0, velges det uthevede forslaget: angi inputValue til suggestions[selectedIndex], lukk nedtrekkslisten og tilbakestill selectedIndex til -1. Hvis ingen forslag er uthevet (selectedIndex er -1), lar du den vanlige innsendingen av skjemaet eller søkehandlingen fortsette.
Escape-tastens oppførsel
Når Escape trykkes, lukkes nedtrekkslisten ved å angi isOpen til false, og selectedIndex tilbakestilles til -1. Ikke fjern inndataverdien – brukeren ønsker bare å lukke forslagene uten å velge et av dem, og vil beholde teksten som er skrevet inn for videre redigering.
Tab-tastens oppførsel
Når Tab trykkes, lukkes nedtrekkslisten fordi nettleseren uansett flytter fokuset til neste fokuserbare element. Ved å angi isOpen til false ved Tab sikrer du at nedtrekkslisten ikke forblir åpen etter at fokuset forlater inndatafeltet. Det er ikke nødvendig å kalle preventDefault() – la nettleseren håndtere den naturlige tabulatorrekkefølgen.
Visuell utheving av valgt rad
Det uthevede forslaget må være visuelt tydelig. Bruk en aktiv stil på forslaget ved selectedIndex: className={index === selectedIndex ? 'suggestion suggestion--active' : 'suggestion'}. Aktivtilstanden bruker vanligvis en endring i bakgrunnsfargen, slik at det blir tydelig hvilket element som velges når Enter trykkes.
Rulle det valgte elementet inn i visningen
Når forslagslisten har en max-høyde og kan rulles, kan det uthevede elementet forsvinne utenfor skjermen under tastaturnavigering. Bruk en ref-array til å lagre DOM-elementene for forslagene, og kall listItemRefs.current[selectedIndex]?.scrollIntoView({ block: 'nearest' }) hver gang selectedIndex endres. Blokkverdien nearest minimerer mengden rulling.
Synkronisere selectedIndex når forslag endres
Når inndata endres og en ny filtrert liste vises, tilbakestilles selectedIndex til -1 i den samme tilstandsoppdateringen eller i en useEffect som avhenger av forslagene. Foreldede indekser som peker på fjernede elementer, ville ført til at brukeren valgte feil forslag.
Full flyt for tastaturnavigering
Den komplette brukerflyten: Brukeren skriver for å filtrere, ArrowDown uthever det første elementet, flere trykk på ArrowDown beveger seg gjennom listen, ArrowUp beveger seg opp igjen, Enter velger det uthevede elementet, og Escape lukker uten å velge. Dette dekker alle standardmønstre for tastaturinteraksjon som brukere forventer fra et autocomplete-felt.
Forhindre standardoppførsel for piltaster
Kall alltid e.preventDefault() når ArrowDown og ArrowUp håndteres i et tekstfelt. Uten dette flytter ArrowDown tekstmarkøren til slutten, mens ArrowUp flytter den til begynnelsen. Disse markørbevegelsene ville komme i konflikt med navigeringen ved hjelp av selectedIndex og føre til forvirrende oppførsel.
Tilordning av taster for tastaturnavigering
Hva skal skje når brukeren trykker på Enter med et forslag uthevet ved selectedIndex = 2?
Oppsummering av leksjonen: Tastaturnavigering
Håndter onKeyDown på inputfeltet. ArrowDown øker selectedIndex (begrenset til maksverdien), ArrowUp reduserer den (begrenset til 0 eller -1), Enter velger det uthevede elementet, Escape lukker uten å velge, og Tab lukker og lar nettleseren flytte fokus. Kall alltid preventDefault for piltastene, og rull det uthevede elementet inn i visningen.
Lær deg React med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 88
- Leksjoner
- 324
Ofte stilte spørsmål
Er leksjonen «Tastaturnavigasjon i forslagslister» gratis?
Ja – hele teksten i «Tastaturnavigasjon i forslagslister» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Tastaturnavigasjon i forslagslister»?
Håndter tastene ArrowUp, ArrowDown, Enter og Escape for å navigere og velge forslag uten mus. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med React Academy?
Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Tastaturnavigasjon i forslagslister»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?
Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Kontrollert inndatafelt med forslagsliste
- Tastaturnavigasjon i forslagslister
- Asynkrone forslag med debounce
- Tilgjengelighet for autofullføringskomponenter