textbox
Merkitsee elementin yksi- tai monirivipohjaisksi tekstisyöttökentäksi. Käytä ensin <input type="text"> tai <textarea> — ne hoitavat kaiken tekstikenttäkäytöksen ilmaiseksi. Turvaudu role="textbox"-rooliin vain kun rakennat rich-text-editoria contenteditable-elementille.
Milloin käyttää
Käytä <input type="text">, <input type="email">, <input type="url">, <input type="tel"> tai <textarea> — kumpi tahansa vastaa syötteen semantiikkaa. Natiivielementti hoitaa valinnan, kursorin, IME-koostuksen, lomakkeen lähetyksen, automaattisen täydennyksen ja validoinnin, joita kaikkia on erittäin vaikea toteuttaa uudelleen.
role="textbox" sopii yhteen elementtityypistä: contenteditable-diviin, jossa on rich-text-editori. Rooli kertoo avustavalle teknologialle, että elementti tulee paljastaa muokattavana alueena eikä yleisenä säilönä. Aseta aria-multiline="true", jos editori hyväksyy useita rivejä.
Jos “tekstikenttäsi” tarvitsee automaattisen täydennyksen ehdotuksia, käytä syötteessä role="combobox" — textbox ei omista ponnahdusikkunaa.
Yleiset virheet
role="textbox"sovellettuna<div>-elementtiin, joka EI olecontenteditable. Rooli ilmoittaa muokattavan kentän, mutta kirjoittaminen ei tee mitään.- Mukautetut tekstikentät ilman paritettu
<label for>taiaria-label— kentällä ei ole saavutettavaa nimeä. placeholder-attribuutin käyttäminen ainoana tunnistetekstinä. Placeholder häviää kohdistuksen yhteydessä, epäonnistuu värikontrastissa monissa teemoissa eikä ole saavutettava nimi.role="textbox"yksirivisessä contenteditable-elementissä, joka ei poista liitetyistä sisällöistä rivinvaihtoja. Käyttäjät liittävät sisältöä rivinvaihdoilla, jotka ohittavat visuaalisen rajoituksen.- Puuttuva
aria-multiline="true"monirivisessä contenteditable-editorissa — ruudunlukuohjelmat ilmoittavat sen yksirivisenä syötteenä.
Esimerkki
<!-- Suositeltava -->
<label for="bio">Lyhyt esittely</label>
<textarea id="bio" rows="4" maxlength="240"></textarea>
<!-- Rich-text-editori -->
<label id="commentLabel">Kommentti</label>
<div
role="textbox"
contenteditable="true"
aria-labelledby="commentLabel"
aria-multiline="true"
></div>