\<input>-typen
Hoe een <input> werkt, hangt sterk af van de waarde van het type-attribuut, vandaar dat de verschillende typen op hun eigen aparte referentiepagina's worden behandeld. Als dit attribuut niet is opgegeven, wordt standaard het type text gebruikt.
De beschikbare typen zijn als volgt:
| Type | Beschrijving | Basisvoorbeelden |
|---|---|---|
button |
Een drukknop zonder standaardgedrag, die de waarde van het value-attribuut weergeeft, standaard leeg.
|
|
checkbox |
Een selectievakje waarmee losse waarden geselecteerd/gedeselecteerd kunnen worden. | |
color |
Een besturingselement voor het opgeven van een kleur; opent een kleurkiezer wanneer het actief is in ondersteunende browsers. | |
date |
Een besturingselement voor het invoeren van een datum (jaar, maand en dag, zonder tijd). Opent een datumkiezer of numerieke wieltjes voor jaar, maand en dag wanneer actief in ondersteunende browsers. | |
datetime-local
|
Een besturingselement voor het invoeren van een datum en tijd, zonder tijdzone. Opent een datumkiezer of numerieke wieltjes voor datum- en tijdonderdelen wanneer actief in ondersteunende browsers. | |
email |
Een veld voor het bewerken van een e-mailadres. Ziet eruit als een
text-invoerveld, maar heeft validatieparameters en een relevant
toetsenbord in ondersteunende browsers en apparaten met dynamische toetsenborden.
|
|
file |
Een besturingselement waarmee de gebruiker een bestand kan selecteren.
Gebruik het accept-attribuut om te bepalen welke bestandstypen het besturingselement kan selecteren.
|
|
hidden |
Een besturingselement dat niet wordt weergegeven, maar waarvan de waarde wel naar de server wordt verzonden. Er staat een voorbeeld in de volgende kolom, maar het is verborgen! | |
image |
Een grafische submit-knop. Toont een afbeelding die is opgegeven met het src-attribuut.
Het alt-attribuut wordt weergegeven als de afbeelding src ontbreekt.
|
|
month |
Een besturingselement voor het invoeren van een maand en jaar, zonder tijdzone. | |
number |
Een besturingselement voor het invoeren van een getal. Toont een spinner en voegt standaard validatie toe. Toont op sommige apparaten met dynamische toetsenborden een numeriek toetsenbord. | |
password |
Een tekstveld op één regel waarvan de waarde onleesbaar wordt gemaakt. Waarschuwt de gebruiker als de site niet beveiligd is. | |
radio |
Een keuzerondje, waarmee één waarde geselecteerd kan worden uit meerdere keuzes met dezelfde name-waarde.
|
|
range |
Een besturingselement voor het invoeren van een getal waarvan de exacte waarde niet belangrijk is.
Wordt weergegeven als een schuifregelaar die standaard op de middelste waarde staat.
Wordt gebruikt in combinatie met min en max om het bereik van toegestane waarden te bepalen.
|
|
reset |
Een knop die de inhoud van het formulier terugzet naar de standaardwaarden. Niet aanbevolen. | |
search |
Een tekstveld op één regel voor het invoeren van zoekopdrachten. Regeleinden worden automatisch uit de ingevoerde waarde verwijderd. Kan in ondersteunende browsers een verwijderpictogram bevatten waarmee het veld gewist kan worden. Toont op sommige apparaten met dynamische toetsenborden een zoekpictogram in plaats van een entertoets. | |
submit |
Een knop die het formulier verzendt. | |
tel |
Een besturingselement voor het invoeren van een telefoonnummer. Toont op sommige apparaten met dynamische toetsenborden een telefoontoetsenbord. | |
text |
De standaardwaarde. Een tekstveld op één regel. Regeleinden worden automatisch uit de ingevoerde waarde verwijderd. | |
time |
Een besturingselement voor het invoeren van een tijdswaarde zonder tijdzone. | |
url |
Een veld voor het invoeren van een URL. Ziet eruit als een text-invoerveld, maar
heeft validatieparameters en een relevant toetsenbord in ondersteunende browsers
en apparaten met dynamische toetsenborden.
|
|
week |
Een besturingselement voor het invoeren van een datum bestaande uit een weekjaarnummer en een weeknummer, zonder tijdzone. | |
| Verouderde waarden | ||
datetime Verouderd |
Een besturingselement voor het invoeren van een datum en tijd (uur, minuut, seconde en fractie van een seconde) op basis van de UTC-tijdzone. | |
Attributen
Het <input>-element is zo krachtig dankzij zijn attributen; het type-attribuut, hierboven met voorbeelden beschreven, is daarbij het belangrijkste. Omdat elk <input>-element, ongeacht het type, gebaseerd is op de HTMLInputElement-interface, delen ze technisch gezien precies dezelfde set attributen. In de praktijk hebben de meeste attributen echter alleen effect op een specifieke subset van invoertypen. Bovendien hangt de manier waarop sommige attributen een invoerveld beïnvloeden af van het invoertype, waardoor ze bij verschillende invoertypen op verschillende manieren van invloed zijn.
Dit gedeelte bevat een tabel met alle attributen en een korte beschrijving. Deze tabel wordt gevolgd door een lijst met een uitgebreidere beschrijving van elk attribuut, samen met de invoertypen waarmee ze geassocieerd zijn. Attributen die bij de meeste of alle invoertypen voorkomen, worden hieronder in meer detail beschreven. Attributen die uniek zijn voor bepaalde invoertypen — of attributen die bij alle invoertypen voorkomen maar bij een specifiek invoertype speciaal gedrag vertonen — worden in plaats daarvan gedocumenteerd op de pagina's van die typen.
Attributen voor het <input>-element omvatten de globale HTML-attributen en daarnaast:
| Attribuut | Type(n) | Beschrijving |
|---|---|---|
accept |
file |
Hint voor het verwachte bestandstype in bestandsupload-besturingselementen |
alpha |
color |
Dekking van de kleur |
alt |
image |
alt-attribuut voor het image-type. Vereist voor toegankelijkheid |
autocapitalize |
alle behalve url, email en password |
Regelt automatisch hoofdlettergebruik in ingevoerde tekst. |
autocomplete |
alle behalve checkbox, radio en knoppen |
Hint voor de automatisch-invullen-functie van formulieren |
capture |
file |
Methode voor media-opname in bestandsupload-besturingselementen |
checked |
checkbox, radio |
Of het commando of besturingselement is aangevinkt |
colorspace |
color |
De kleurruimte die gebruikt moet worden voor het selecteren van de kleurwaarde |
dirname |
hidden, text, search, url, tel, email |
Naam van het formulierveld dat gebruikt wordt om de tekstrichting van het element bij het verzenden van het formulier mee te sturen |
disabled |
alle | Of het formulierbesturingselement uitgeschakeld is |
form |
alle | Koppelt het besturingselement aan een form-element |
formaction |
image, submit |
URL die gebruikt wordt voor het verzenden van het formulier |
formenctype |
image, submit |
Coderingstype van de formuliergegevensset die gebruikt wordt bij het verzenden van het formulier |
formmethod |
image, submit |
HTTP-methode die gebruikt wordt voor het verzenden van het formulier |
formnovalidate |
image, submit |
Formuliervalidatie omzeilen bij het verzenden van het formulier |
formtarget |
image, submit |
Browsing context voor het verzenden van het formulier |
height |
image |
Hetzelfde als het height-attribuut voor <img>; verticale afmeting |
list |
alle behalve hidden, password, checkbox, radio en knoppen |
Waarde van het id-attribuut van de <datalist> met automatisch-aanvullen-opties |
max |
date, month, week, time, datetime-local, number, range |
Maximumwaarde |
maxlength |
text, search, url, tel, email, password |
Maximale lengte (aantal tekens) van value |
min |
date, month, week, time, datetime-local, number, range |
Minimumwaarde |
minlength |
text, search, url, tel, email, password |
Minimale lengte (aantal tekens) van value |
multiple |
email, file |
Booleaans. Of meerdere waarden toegestaan zijn |
name |
alle | Naam van het formulierbesturingselement. Wordt met het formulier verzonden als onderdeel van een naam/waarde-paar |
pattern |
text, search, url, tel, email, password |
Patroon waaraan value moet voldoen om geldig te zijn |
placeholder |
text, search, url, tel, email, password, number |
Tekst die in het formulierbesturingselement verschijnt wanneer er geen waarde is ingesteld |
popovertarget |
button |
Wijst een <input type="button"> aan als besturingselement voor een popover-element |
popovertargetaction |
button |
Bepaalt de actie die een popover-besturingselement moet uitvoeren |
readonly |
alle behalve hidden, range, color, checkbox, radio en knoppen |
Booleaans. De waarde is niet bewerkbaar |
required |
alle behalve hidden, range, color en knoppen |
Booleaans. Er is een waarde vereist, of een aanvinking is vereist, om het formulier te kunnen verzenden |
size |
text, search, url, tel, email, password |
Grootte van het besturingselement |
src |
image |
Hetzelfde als het src-attribuut voor <img>; adres van de afbeeldingsbron |
step |
date, month, week, time, datetime-local, number, range |
Incrementele waarden die geldig zijn |
switch |
checkbox |
Of het checkbox-invoerveld als schakelaar (switch) weergegeven moet worden |
type |
alle | Type formulierbesturingselement |
value |
alle behalve image |
De waarde van het besturingselement. Indien opgegeven in de HTML, komt dit overeen met de beginwaarde |
width |
image |
Hetzelfde als het width-attribuut voor <img> |
Hierna volgen enkele extra niet-standaard attributen, na de beschrijvingen van de standaardattributen.
Individuele attributen
Alleen geldig voor het invoertype file; het accept-attribuut bepaalt welke bestandstypen selecteerbaar zijn in een file-uploadbesturingselement. Zie het invoertype file. | |
| Alleen geldig voor het invoertype color; het alpha-attribuut geeft de eindgebruiker de mogelijkheid om de dekking (opacity) van de geselecteerde kleur in te stellen. |
Alleen geldig voor de image-knop; het alt-attribuut biedt alternatieve tekst voor de afbeelding, en toont de waarde van het attribuut wanneer de afbeelding src ontbreekt of anderszins niet geladen kan worden. Zie het invoertype image. | |
Bepaalt of ingevoerde tekst automatisch met een hoofdletter begint en, zo ja, op welke manier. Zie de pagina van het globale attribuut autocapitalize voor meer informatie. | |
|
(Geen booleaans attribuut!) Het Het Zie het | |
|
Een booleaans attribuut dat, indien aanwezig, aangeeft dat het invoerveld automatisch focus moet krijgen zodra de pagina klaar is met laden (of wanneer de Opmerking
Een element met het Niet meer dan één element in het document mag het Het Let op
Het automatisch focussen van een formulierbesturingselement kan verwarrend zijn voor slechtziende mensen die schermlezers gebruiken en voor mensen met cognitieve beperkingen. Wanneer Overweeg de toegankelijkheid zorgvuldig bij het toepassen van het | |
Geïntroduceerd in de HTML Media Capture-specificatie en alleen geldig voor het invoertype file; het capture-attribuut bepaalt welk medium — microfoon, video of camera — gebruikt moet worden om in ondersteunde scenario's een nieuw bestand op te nemen voor upload met het file-uploadbesturingselement. Zie het invoertype file. | |
|
Geldig voor zowel het Opmerking
In tegenstelling tot andere invoerbesturingselementen wordt de waarde van selectievakjes en keuzerondjes alleen meegestuurd in de verzonden gegevens als ze op dat moment Als bijvoorbeeld een selectievakje met | |
| Alleen geldig voor het invoertype color; het colorspace-attribuut bepaalt de kleurruimte die gebruikt wordt door de invoer van het type type="color". Mogelijke opgesomde waarden zijn:
|
|
Geldig voor de invoertypen HTML Wanneer bovenstaand formulier wordt verzonden, zorgt het invoerveld ervoor dat zowel het | |
|
Een booleaans attribuut dat, indien aanwezig, aangeeft dat de gebruiker niet met het invoerveld moet kunnen interageren. Uitgeschakelde invoervelden worden doorgaans weergegeven met een dofferre kleur of een andere aanduiding dat het veld niet beschikbaar is voor gebruik. Specifiek: uitgeschakelde invoervelden ontvangen het Opmerking
Hoewel niet vereist door de specificatie, zal Firefox standaard de dynamische disabled-status behouden van een | |
|
Een tekenreeks die het Met het Opmerking
Een invoerveld kan slechts met één formulier geassocieerd worden. | |
Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie. | |
Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie. | |
Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie. | |
Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie. | |
Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie. | |
Alleen geldig voor de image-invoerknop; height is de hoogte van het afbeeldingsbestand dat weergegeven wordt om de grafische submit-knop voor te stellen. Zie het invoertype image. | |
Globaal attribuut, geldig voor alle elementen, inclusief alle invoertypen; het definieert een unieke identifier (ID) die uniek moet zijn in het hele document. Het doel is het element te identificeren bij het koppelen. De waarde wordt gebruikt als waarde van het for-attribuut van <label> om het label aan het formulierbesturingselement te koppelen. Zie <label>. | |
Globale waarde, geldig voor alle elementen; geeft browsers een hint over welke virtuele-toetsenbordconfiguratie gebruikt moet worden bij het bewerken van dit element of de inhoud ervan. Waarden zijn onder andere none, text, tel, url, email, numeric, decimal en search. | |
|
De waarde van het Het is geldig voor Volgens de specificaties wordt het Afhankelijk van de browser kan de gebruiker een aangepast kleurenpalet zien, streepjes langs een schuifbalk, of zelfs een invoerveld dat opent als een Zie het | |
|
Geldig voor Er is een speciaal geval: als het gegevenstype periodiek is (zoals bij datums of tijden), mag de waarde van | |
|
Geldig voor Het invoerveld faalt bij validatie van beperkingen als de lengte van de in het veld ingevoerde tekst groter is dan | |
|
Geldig voor Deze waarde moet kleiner dan of gelijk aan de waarde van het Er is een speciaal geval: als het gegevenstype periodiek is (zoals bij datums of tijden), mag de waarde van | |
|
Geldig voor Het invoerveld faalt bij validatie van beperkingen als de lengte van de in het veld ingevoerde tekst korter is dan | |
Het booleaanse multiple-attribuut betekent, indien ingesteld, dat de gebruiker door komma's gescheiden e-mailadressen kan invoeren in het email-widget, of meer dan één bestand kan kiezen bij de file-invoer. Zie de invoertypen email en file. | |
|
Een tekenreeks die een naam voor het invoerbesturingselement opgeeft. Deze naam wordt samen met de waarde van het besturingselement verzonden wanneer de formuliergegevens worden verzonden. Beschouw Er zijn twee bijzondere gevallen:
Het Slechts één keuzerondje in een gelijknamige groep keuzerondjes kan tegelijk aangevinkt zijn. Het selecteren van een willekeurig keuzerondje in die groep deselecteert automatisch het momenteel geselecteerde keuzerondje in dezelfde groep. De waarde van dat ene aangevinkte keuzerondje wordt samen met de naam verzonden als het formulier wordt verzonden. Bij het tabben door een reeks gelijknamige keuzerondjes krijgt, als er één is aangevinkt, dat aangevinkte rondje focus. Als ze niet in de brontekstvolgorde bij elkaar staan en één van de groep is aangevinkt, begint het tabben in de groep zodra het eerste element van de groep bereikt wordt, waarbij alle niet-aangevinkte rondjes worden overgeslagen. Met andere woorden: als er één is aangevinkt, slaat tabben de niet-aangevinkte keuzerondjes in de groep over. Als er geen is aangevinkt, krijgt de keuzerondjegroep focus wanneer het eerste rondje met dezelfde naam wordt bereikt. Zodra een van de keuzerondjes in een groep focus heeft, kun je met de pijltjestoetsen door alle keuzerondjes met dezelfde naam navigeren, zelfs als de keuzerondjes niet bij elkaar staan in de brontekstvolgorde. Wanneer een invoerelement een JS Wanneer deze code is uitgevoerd, is Let op
Vermijd het geven van een | |
|
Geldig voor
Als het Opmerking
Informeer, wanneer je het Zie Clientzijdige validatie voor meer informatie. | |
|
Geldig voor Opmerking
Het | |
Maakt van een <input type="button">-element een popover-besturingsknop; neemt als waarde de ID van het popover-element dat aangestuurd wordt. Zie de landingspagina van de Popover API voor meer details. Het tot stand brengen van een relatie tussen een popover en zijn oproepende knop met behulp van het popovertarget-attribuut heeft twee extra nuttige effecten:
| |
Bepaalt de actie die uitgevoerd moet worden op een popover-element dat wordt aangestuurd door een besturingselement <input type="button">. Mogelijke waarden zijn:
| |
|
Een booleaans attribuut dat, indien aanwezig, aangeeft dat de gebruiker de waarde van het invoerveld niet mag bewerken. Het Zie het HTML-attribuut | |
|
Zie Clientzijdige validatie en het HTML-attribuut | |
Geldig voor email, password, tel, url en text; het size-attribuut bepaalt hoeveel van het invoerveld wordt weergegeven. Het levert in wezen hetzelfde resultaat op als het instellen van de CSS-eigenschap width, met een paar bijzonderheden. De feitelijke eenheid van de waarde hangt af van het invoertype. Voor password en text is het een aantal tekens (of em-eenheden) met een standaardwaarde van 20, en voor de overige is het pixels (of px-eenheden). CSS width heeft voorrang op het size-attribuut. | |
Alleen geldig voor de image-invoerknop; src is een tekenreeks die de URL opgeeft van het afbeeldingsbestand dat wordt weergegeven om de grafische submit-knop voor te stellen. Zie het invoertype image. | |
|
Geldig voor Indien niet expliciet opgenomen:
De waarde moet een positief getal zijn — geheel getal of kommagetal — of de speciale waarde Als je bijvoorbeeld Opmerking
Wanneer de door de gebruiker ingevoerde gegevens niet voldoen aan de stapconfiguratie, wordt de waarde als ongeldig beschouwd bij validatie van beperkingen en komt deze overeen met de Zie Clientzijdige validatie voor meer informatie. | |
|
Alleen geldig voor Opmerking
Dit attribuut is nog experimenteel en heeft beperkte browserondersteuning. Het attribuut wordt genegeerd in niet-ondersteunende browsers. |
| Globaal attribuut, geldig voor alle elementen, inclusief alle invoertypen; een geheel getal dat aangeeft of het element toetsenbordfocus kan krijgen (focusbaar is), en of het moet meedoen aan sequentiële toetsenbordnavigatie. Aangezien alle invoertypen behalve invoer van het type hidden focusbaar zijn, zou dit attribuut niet gebruikt moeten worden op formulierbesturingselementen, omdat dat het beheren van de focusvolgorde voor alle elementen in het document zou vereisen, met het risico de bruikbaarheid en toegankelijkheid te schaden als dit onjuist wordt gedaan. | |
Globaal attribuut, geldig voor alle elementen, inclusief alle invoertypen; bevat tekst met adviserende informatie over het element waartoe het behoort. Dergelijke informatie kan doorgaans, maar niet noodzakelijk, aan de gebruiker worden getoond als tooltip. De title mag NIET gebruikt worden als de primaire uitleg over het doel van het formulierbesturingselement. Gebruik in plaats daarvan het <label>-element met een for-attribuut dat is ingesteld op het id-attribuut van het formulierbesturingselement. Zie Labels hieronder. | |
|
Een tekenreeks die het type van het te renderen besturingselement opgeeft. Om bijvoorbeeld een selectievakje te maken, wordt de waarde Toegestane waarden staan hierboven vermeld bij Invoertypen. | |
De waarde van het invoerbesturingselement. Indien opgegeven in de HTML, is dit de beginwaarde, en vanaf dat moment kan deze op elk moment worden gewijzigd of opgehaald met JavaScript via de value-eigenschap van het bijbehorende HTMLInputElement-object. Het value-attribuut is altijd optioneel, hoewel het als verplicht beschouwd zou moeten worden voor checkbox, radio en hidden. | |
Alleen geldig voor de image-invoerknop; width is de breedte van het afbeeldingsbestand dat wordt weergegeven om de grafische submit-knop voor te stellen. Zie het invoertype image. |
Niet-standaard attributen
De volgende niet-standaard attributen zijn ook beschikbaar in sommige browsers. Als algemene regel geldt dat je ze moet vermijden, tenzij het niet anders kan.
| Attribuut | Beschrijving |
|---|---|
incremental |
Of er al dan niet herhaaldelijk search-events verzonden moeten worden, zodat live zoekresultaten bijgewerkt kunnen worden terwijl de gebruiker de waarde van het veld nog aan het bewerken is.
Alleen WebKit en Blink (Safari, Chrome, Opera, enz.).
|
mozactionhint Verouderd |
Een tekenreeks die het type actie aangeeft dat wordt uitgevoerd wanneer de gebruiker
op de toets Enter of Return drukt tijdens het bewerken van het
veld; dit wordt gebruikt om een passend label voor die toets op een virtueel toetsenbord te bepalen. Omdat dit attribuut verouderd is, gebruik in plaats daarvan |
orient |
Bepaalt de oriëntatie van de schuifregelaar (range slider). Alleen Firefox. |
results |
Het maximale aantal items dat weergegeven moet worden in de vervolgkeuzelijst met eerdere zoekopdrachten. Alleen Safari. |
webkitdirectory
|
Een booleaanse waarde die aangeeft of de gebruiker alleen een map (of mappen, als multiple ook aanwezig is) mag kiezen
|
|
Het booleaanse attribuut Als Het |
|---|---|
| Vergelijkbaar met de niet-standaard CSS-eigenschap -moz-orient die van invloed is op de elementen <progress> en <meter>, bepaalt het orient-attribuut de oriëntatie van de schuifregelaar (range slider). Mogelijke waarden zijn horizontal, wat betekent dat de schuifregelaar horizontaal wordt weergegeven, en vertical, waarbij de schuifregelaar verticaal wordt weergegeven. Zie Verticale formulierbesturingselementen maken voor een moderne aanpak voor het maken van verticale formulierbesturingselementen. |
|
Het De waarde moet een niet-negatief decimaal getal zijn. Indien niet opgegeven, of als een ongeldige waarde wordt opgegeven, wordt het standaard maximale aantal vermeldingen van de browser gebruikt. |
|
Het booleaanse attribuut Hoewel oorspronkelijk alleen geïmplementeerd voor op WebKit gebaseerde browsers, is |
Methoden
De volgende methoden worden aangeboden door de HTMLInputElement-interface, die <input>-elementen in de DOM voorstelt. Ook beschikbaar zijn de methoden die gespecificeerd worden door de bovenliggende interfaces HTMLElement, Element, Node en EventTarget.
checkValidity() | Geeft true terug als de waarde van het element de geldigheidscontroles doorstaat; anders geeft het false terug en vuurt het een invalid-event af op het element. |
|---|---|
reportValidity() | Geeft true terug als de waarde van het element de geldigheidscontroles doorstaat; anders geeft het false terug, vuurt het een invalid-event af op het element, en meldt het (als het event niet wordt geannuleerd) het probleem aan de gebruiker. |
select() | Selecteert de volledige inhoud van het <input>-element, als de inhoud van het element selecteerbaar is. Voor elementen zonder selecteerbare tekstinhoud (zoals een visuele kleurkiezer of kalenderinvoer voor een datum) doet deze methode niets. |
setCustomValidity() | Stelt een aangepast bericht in dat weergegeven wordt als de waarde van het invoerelement ongeldig is. |
setRangeText() | Stelt de inhoud van het opgegeven tekenbereik in het invoerelement in op een gegeven tekenreeks. Er is een selectMode-parameter beschikbaar om te bepalen hoe de bestaande inhoud wordt beïnvloed. |
setSelectionRange() | Selecteert het opgegeven tekenbereik binnen een tekstueel invoerelement. Doet niets bij invoervelden die niet als tekstinvoerveld worden weergegeven. |
showPicker() | Toont de browserkiezer voor het invoerelement die normaal gesproken wordt weergegeven wanneer het element wordt geselecteerd, maar dan geactiveerd door een knopdruk of andere gebruikersinteractie. |
stepDown() | Verlaagt de waarde van een numeriek invoerveld met één, standaard, of met het opgegeven aantal eenheden. |
stepUp() | Verhoogt de waarde van een numeriek invoerveld met één of met het opgegeven aantal eenheden. |
CSS
Invoervelden zijn vervangen elementen (replaced elements) en hebben daardoor een aantal kenmerken die niet van toepassing zijn op elementen die geen formulierelement zijn. Er zijn CSS-selectors die specifiek formulierbesturingselementen kunnen aanspreken op basis van hun UI-kenmerken, ook wel UI-pseudoklassen genoemd. Het invoerelement kan ook per type worden aangesproken met attribuutselectors. Er zijn ook enkele eigenschappen die bijzonder nuttig zijn.
UI-pseudoklassen
| Pseudoklasse | Beschrijving |
|---|---|
:enabled |
Elk momenteel ingeschakeld element dat geactiveerd kan worden (geselecteerd, aangeklikt, beschreven, enz.) of focus kan krijgen, en dat ook een uitgeschakelde status heeft, waarin het niet geactiveerd kan worden of focus kan krijgen. |
:disabled |
Elk momenteel uitgeschakeld element dat een ingeschakelde status heeft, wat betekent dat het anders geactiveerd (geselecteerd, aangeklikt, beschreven, enz.) of gefocust zou kunnen worden als het niet uitgeschakeld was. |
:read-only |
Element dat niet door de gebruiker bewerkt kan worden |
:read-write |
Element dat door de gebruiker bewerkt kan worden. |
:placeholder-shown |
Element dat op dit moment placeholder-tekst weergeeft,
inclusief <input>- en <textarea>-elementen met het placeholder-attribuut aanwezig, die nog geen waarde hebben.
|
:default |
Formulierelementen die de standaard zijn in een groep gerelateerde elementen.
Komt overeen met invoertypen checkbox en
radio die
bij het laden of renderen van de pagina waren aangevinkt.
|
:checked |
Komt overeen met invoertypen checkbox en
radio die
momenteel zijn aangevinkt (en de <option> in een
<select> die momenteel geselecteerd is).
|
:indeterminate |
checkbox-elementen
waarvan de indeterminate-eigenschap door JavaScript op true is gezet,
radio-elementen, wanneer alle
keuzerondjes met dezelfde naamwaarde in het formulier niet aangevinkt zijn, en
<progress>-elementen in een onbepaalde status
|
:valid |
Formulierbesturingselementen waarop validatie van beperkingen toegepast kan worden en die momenteel geldig zijn. |
:invalid |
Formulierbesturingselementen waarop validatie van beperkingen is toegepast en die momenteel
niet geldig zijn. Komt overeen met een formulierbesturingselement waarvan de waarde niet voldoet aan de
beperkingen die door zijn attributen zijn ingesteld, zoals
required,
pattern,
step en max.
|
:in-range |
Een niet-lege invoer waarvan de huidige waarde binnen de bereikgrenzen valt
die zijn opgegeven door de attributen min en max en de step.
|
:out-of-range |
Een niet-lege invoer waarvan de huidige waarde NIET binnen de bereikgrenzen valt
die zijn opgegeven door de attributen min
en max, of
die niet voldoet aan de step-beperking.
|
:required |
Een element <input>, <select> of <textarea> waarop het attribuut required is ingesteld.
Komt alleen overeen met elementen die verplicht gesteld kunnen worden.
Het attribuut op een niet-verplicht-baar element zorgt niet voor een match.
|
:optional |
Een element <input>, <select> of
<textarea> waarop het attribuut required NIET is ingesteld.
Komt niet overeen met elementen die niet verplicht gesteld kunnen worden.
|
:blank |
<input>- en <textarea>-elementen die op dit moment geen waarde hebben.
|
:user-invalid |
Vergelijkbaar met :invalid, maar wordt geactiveerd bij het verlaten van het veld (blur). Komt overeen met
een ongeldig invoerveld, maar alleen na interactie van de gebruiker, zoals het focussen
van het besturingselement, het verlaten ervan, of een poging om het formulier
met het ongeldige besturingselement te verzenden.
|
:open |
<input>-elementen die een kiezer weergeven waaruit de gebruiker een waarde kan kiezen (bijvoorbeeld <input type="color">) — maar alleen wanneer het element zich in de open status bevindt, dat wil zeggen wanneer de kiezer wordt weergegeven.
|
Voorbeeld van pseudoklassen
We kunnen het label van een selectievakje stylen op basis van of het selectievakje is aangevinkt of niet. In dit voorbeeld stylen we de color en font-weight van het <label> dat direct na een aangevinkt invoerveld komt. We hebben geen stijlen toegepast als het input-veld niet is aangevinkt.
<input id="checkboxInput" type="checkbox" />
<label for="checkboxInput">Toggle the checkbox on and off</label>input:checked + label {
color: red;
font-weight: bold;
}Attribuutselectors
Het is mogelijk om verschillende typen formulierbesturingselementen op basis van hun type aan te spreken met attribuutselectors. CSS-attribuutselectors matchen elementen op basis van ofwel alleen de aanwezigheid van een attribuut, ofwel de waarde van een gegeven attribuut.
/* matches a password input */
input[type="password"] {
}
/* matches a form control whose valid values are limited to a range of values */
input[min][max] {
}
/* matches a form control with a pattern attribute */
input[pattern] {
}::placeholder
Standaard is het uiterlijk van placeholdertekst doorschijnend of lichtgrijs. Het pseudo-element ::placeholder is de placeholder-tekst van het invoerveld. Het kan gestyled worden met een beperkte subset van CSS-eigenschappen.
::placeholder {
color: blue;
}Alleen de subset van CSS-eigenschappen die van toepassing is op het pseudo-element ::first-line kan gebruikt worden in een regel met ::placeholder in de selector.
caret-color
Een eigenschap die specifiek is voor elementen gerelateerd aan tekstinvoer, is de CSS-eigenschap caret-color, waarmee je de kleur kunt instellen die gebruikt wordt om de tekstcursor (caret) van het invoerveld te tekenen:
HTML
<label for="textInput">Note the red caret:</label>
<input id="textInput" class="custom" size="32" />CSS
input.custom {
caret-color: red;
font:
16px "Helvetica",
"Arial",
sans-serif;
}Resultaat
field-sizing
Met de eigenschap field-sizing kun je het gedrag van de grootte van formulierinvoervelden regelen (d.w.z. dat ze standaard een voorkeursgrootte krijgen). Met deze eigenschap kun je het standaardgedrag overschrijven, zodat formulierbesturingselementen qua grootte aangepast kunnen worden aan hun inhoud.
Deze eigenschap wordt doorgaans gebruikt om formuliervelden te maken die krimpen om hun inhoud en groeien naarmate er meer tekst wordt ingevoerd. Dit werkt met invoertypen die directe tekstinvoer accepteren (bijvoorbeeld text en url), het invoertype file, en <textarea>-elementen.
object-position en object-fit
In bepaalde gevallen (doorgaans bij niet-tekstuele invoer en gespecialiseerde interfaces) is het <input>-element een vervangen element (replaced element). In dat geval kunnen de positie en grootte van het element binnen zijn kader worden aangepast met de CSS-eigenschappen object-position en object-fit.
Vormgeving
Voor meer informatie over het toevoegen van kleur aan elementen in HTML, zie:
- Kleur toepassen op HTML-elementen met CSS.
Zie ook:
- Geavanceerd stylen van HTML-formulieren en
Aanvullende functies
Labels
Labels zijn nodig om ondersteunende tekst te koppelen aan een <input>. Het <label>-element biedt toelichtende informatie over een formulierveld, en is altijd passend (afgezien van eventuele lay-outoverwegingen die je hebt). Het is nooit een slecht idee om een <label> te gebruiken om uit te leggen wat er in een <input> of <textarea> moet worden ingevoerd.
Gekoppelde labels
De semantische koppeling van <input>- en <label>-elementen is nuttig voor ondersteunende technologieën zoals schermlezers. Door ze te koppelen met het for-attribuut van <label>, verbind je het label met het invoerveld op een manier waardoor schermlezers invoervelden nauwkeuriger aan gebruikers kunnen beschrijven.
Het is niet voldoende om platte tekst naast het <input>-element te plaatsen. Bruikbaarheid en toegankelijkheid vereisen namelijk het opnemen van ofwel een impliciet, ofwel een expliciet <label>:
<!-- inaccessible -->
<p>Enter your name: <input id="name" type="text" size="30" /></p>
<!-- implicit label -->
<p>
<label>Enter your name: <input id="name" type="text" size="30" /></label>
</p>
<!-- explicit label -->
<p>
<label for="name">Enter your name: </label>
<input id="name" type="text" size="30" />
</p>Het eerste voorbeeld is ontoegankelijk: er bestaat geen relatie tussen de prompt en het <input>-element.
Naast een toegankelijke naam biedt het label een groter "hit"-gebied voor muis- en aanraakschermgebruikers om op te klikken of aan te raken. Door een <label> te koppelen aan een <input>, krijgt het <input> focus wanneer je op een van beide klikt. Als je platte tekst gebruikt om je invoerveld te "labelen", gebeurt dit niet. Het opnemen van de prompt in het activeringsgebied van het invoerveld is nuttig voor mensen met motorische beperkingen.
Als webontwikkelaars is het belangrijk dat we er nooit van uitgaan dat mensen alles weten wat wij weten. De diversiteit van mensen die het web gebruiken — en dus ook jouw website — garandeert vrijwel dat sommige bezoekers van je site een ander denkproces en/of andere omstandigheden hebben, waardoor ze jouw formulieren heel anders interpreteren dan jij, zonder duidelijke en goed gepresenteerde labels.
Placeholders zijn niet toegankelijk
Met het placeholder-attribuut kun je tekst opgeven die in het inhoudsgebied van het <input>-element zelf verschijnt wanneer het leeg is. De placeholder zou nooit noodzakelijk moeten zijn om je formulieren te begrijpen. Het is geen label en zou niet als vervanging daarvoor gebruikt moeten worden, omdat het dat niet is. De placeholder wordt gebruikt om een hint te geven over hoe een ingevoerde waarde eruit zou moeten zien, niet als uitleg of prompt.
De placeholder is niet alleen ontoegankelijk voor schermlezers, maar verdwijnt ook zodra de gebruiker tekst invoert in het formulierbesturingselement, of als het formulierbesturingselement al een waarde heeft. Browsers met automatische paginavertaalfuncties kunnen attributen overslaan bij het vertalen, wat betekent dat de placeholder mogelijk niet vertaald wordt.
Gebruik het placeholder-attribuut niet als je dat kunt vermijden. Als je een <input>-element moet labelen, gebruik dan het <label>-element.
Clientzijdige validatie
Clientzijdige validatie is nuttig, maar garandeert niet dat de server geldige gegevens ontvangt. Als de gegevens in een specifiek formaat moeten zijn, verifieer dit dan altijd ook server-side, en geef een 400-HTTP-respons terug als het formaat ongeldig is.
Naast het gebruik van CSS om invoervelden te stylen op basis van de UI-statussen :valid of :invalid op basis van de huidige status van elk invoerveld, zoals hierboven vermeld in het gedeelte UI-pseudoklassen, biedt de browser clientzijdige validatie bij het (poging tot) verzenden van het formulier. Bij het verzenden van het formulier, als er een formulierbesturingselement is dat niet aan de validatie van beperkingen voldoet, tonen ondersteunende browsers een foutmelding bij het eerste ongeldige formulierbesturingselement; hierbij wordt een standaardbericht op basis van het foutype weergegeven, of een bericht dat je zelf hebt ingesteld.
Sommige invoertypen en andere attributen leggen beperkingen op aan wat geldige waarden zijn voor een bepaald invoerveld. Bijvoorbeeld, <input type="number" min="2" max="10" step="2"> betekent dat alleen de getallen 2, 4, 6, 8 of 10 geldig zijn. Er kunnen verschillende fouten optreden, waaronder een rangeUnderflow-fout als de waarde kleiner is dan 2, rangeOverflow als deze groter is dan 10, stepMismatch als de waarde een getal tussen 2 en 10 is, maar geen even geheel getal (voldoet niet aan de vereisten van het step-attribuut), of typeMismatch als de waarde geen getal is.
Voor invoertypen waarvan het domein van mogelijke waarden periodiek is (dat wil zeggen, bij de hoogst mogelijke waarde lopen de waarden terug naar het begin in plaats van te eindigen), is het mogelijk dat de waarden van de eigenschappen max en min omgekeerd zijn, wat aangeeft dat het bereik van toegestane waarden begint bij min, terugloopt naar de laagst mogelijke waarde, en dan doorgaat tot max bereikt is. Dit is met name nuttig voor datums en tijden, zoals wanneer je het bereik van 20.00 tot 8.00 uur wilt toestaan:
<input type="time" min="20:00" max="08:00" name="overnight" />Specifieke attributen en hun waarden kunnen leiden tot een specifieke fout in ValidityState:
| Attribuut | Relevante eigenschap | Beschrijving |
|---|---|---|
max |
validityState.rangeOverflow |
Treedt op wanneer de waarde groter is dan de maximumwaarde zoals bepaald door het `max`-attribuut |
maxlength |
validityState.tooLong |
Treedt op wanneer het aantal tekens groter is dan het aantal dat is toegestaan door de eigenschap `maxlength` |
min |
validityState.rangeUnderflow |
Treedt op wanneer de waarde kleiner is dan de minimumwaarde zoals bepaald door het `min`-attribuut |
minlength |
validityState.tooShort |
Treedt op wanneer het aantal tekens kleiner is dan het aantal dat vereist is door de eigenschap `minlength` |
pattern |
validityState.patternMismatch |
Treedt op wanneer een pattern-attribuut is opgenomen met een geldige reguliere expressie en de `value` daar niet mee overeenkomt. |
required |
validityState.valueMissing |
Treedt op wanneer het `required`-attribuut aanwezig is, maar de waarde `null` is, of een keuzerondje of selectievakje niet is aangevinkt. |
step |
validityState.stepMismatch |
De waarde komt niet overeen met de stapgrootte. De standaard stapgrootte is `1`, dus alleen gehele getallen zijn geldig bij `type="number"` als step niet is opgenomen. `step="any"` zal deze fout nooit veroorzaken. |
type |
validityState.typeMismatch |
Treedt op wanneer de waarde niet van het juiste type is, bijvoorbeeld wanneer een e-mailadres geen `@` bevat of een url geen protocol bevat. |
Als een formulierbesturingselement het required-attribuut niet heeft, is geen waarde, of een lege tekenreeks, niet ongeldig. Zelfs als de bovenstaande attributen aanwezig zijn, met uitzondering van required, leidt een lege tekenreeks niet tot een fout.
We kunnen beperkingen instellen voor de waarden die we accepteren, en ondersteunende browsers valideren deze formulierwaarden native en waarschuwen de gebruiker als er bij het verzenden van het formulier een fout is.
Naast de fouten die in de bovenstaande tabel zijn beschreven, bevat de validityState-interface de booleaanse, alleen-lezen eigenschappen badInput, valid en customError. Het validity-object omvat:
Voor elk van deze booleaanse eigenschappen geeft een waarde van true aan dat de opgegeven reden waarom validatie zou kunnen zijn mislukt, waar is, met uitzondering van de eigenschap valid, die true is als de waarde van het element aan alle beperkingen voldoet.
Als er een fout is, zullen ondersteunende browsers zowel de gebruiker waarschuwen als voorkomen dat het formulier wordt verzonden. Let op: als een aangepaste fout is ingesteld op een waarheidsgetrouwe waarde (iets anders dan een lege tekenreeks of null), wordt voorkomen dat het formulier wordt verzonden. Als er geen aangepast foutbericht is, en geen van de andere eigenschappen true teruggeeft, is valid waar, en kan het formulier worden verzonden.
function validate(input) {
let validityState = input.validity;
if (validityState.valueMissing) {
input.setCustomValidity("A value is required");
} else if (validityState.rangeUnderflow) {
input.setCustomValidity("Your value is too low");
} else if (validityState.rangeOverflow) {
input.setCustomValidity("Your value is too high");
} else {
input.setCustomValidity("");
}
}De laatste regel, waarin het aangepaste geldigheidsbericht wordt ingesteld op een lege tekenreeks, is essentieel. Als de gebruiker een fout maakt en de geldigheid is ingesteld, zal het verzenden mislukken, zelfs als alle waarden geldig zijn, totdat het bericht null is.
Voorbeeld van een aangepaste validatiefout
Als je een aangepast foutbericht wilt tonen wanneer een veld niet valideert, moet je de Constraint Validation API gebruiken die beschikbaar is op <input>- (en gerelateerde) elementen. Neem het volgende formulier:
<form>
<label for="name">Enter username (upper and lowercase letters): </label>
<input type="text" name="name" id="name" required pattern="[A-Za-z]+" />
<button>Submit</button>
</form>De basisfuncties voor HTML-formuliervalidatie zorgen ervoor dat dit een standaard foutbericht produceert als je probeert het formulier te verzenden zonder geldige invoer, of met een waarde die niet overeenkomt met het pattern.
Als je in plaats daarvan aangepaste foutberichten wilt weergeven, kun je JavaScript gebruiken zoals in het volgende voorbeeld:
const nameInput = document.querySelector("input");
nameInput.addEventListener("input", () => {
nameInput.setCustomValidity("");
nameInput.checkValidity();
});
nameInput.addEventListener("invalid", () => {
if (nameInput.value === "") {
nameInput.setCustomValidity("Enter your username!");
} else {
nameInput.setCustomValidity(
"Usernames can only contain upper and lowercase letters. Try again!",
);
}
});Het voorbeeld ziet er als volgt uit:
Kort samengevat:
- We controleren de geldige status van het invoerelement elke keer dat de waarde ervan wordt gewijzigd, door de methode
checkValidity()uit te voeren via de event handler van hetinput-event. - Als de waarde ongeldig is, wordt een
invalid-event afgevuurd en wordt de event-handlerfunctie voorinvaliduitgevoerd. Binnen deze functie bepalen we, met behulp van eenif ()-blok, of de waarde ongeldig is omdat deze leeg is of omdat deze niet overeenkomt met het patroon, en stellen we een aangepast geldigheidsfoutbericht in. - Als gevolg hiervan wordt, als de invoerwaarde ongeldig is op het moment dat op de submit-knop wordt gedrukt, een van de aangepaste foutberichten getoond.
- Als de waarde geldig is, wordt het formulier zoals verwacht verzonden. Hiervoor moet de aangepaste geldigheid worden geannuleerd, door
setCustomValidity()aan te roepen met een lege tekenreeks als waarde. We doen dit daarom elke keer dat hetinput-event wordt afgevuurd. Als je dit niet doet en er eerder een aangepaste geldigheid was ingesteld, wordt het invoerveld geregistreerd als ongeldig, zelfs als het bij het verzenden een geldige waarde bevat.
Valideer invoerbeperkingen altijd zowel aan de client- als aan de serverzijde. Validatie van beperkingen maakt validatie aan de serverzijde niet overbodig. Ongeldige waarden kunnen nog steeds worden verzonden door oudere browsers of door kwaadwillenden.
Firefox ondersteunde gedurende vele versies een eigen (proprietary) foutattribuut — x-moz-errormessage — waarmee je op vergelijkbare wijze aangepaste foutberichten kon instellen. Dit is verwijderd sinds versie 66 (zie Firefox-bug 1513890).
Lokalisatie
De toegestane invoer voor bepaalde <input>-typen hangt af van de landinstelling (locale). In sommige landinstellingen is 1.000,00 een geldig getal, terwijl in andere landinstellingen de geldige manier om dit getal in te voeren 1,000.00 is.
Firefox gebruikt de volgende heuristieken om de landinstelling te bepalen waarmee de invoer van de gebruiker gevalideerd wordt (in ieder geval voor type="number"):
- Probeer de taal die is opgegeven met een
lang/xml:lang-attribuut op het element of een van zijn voorouders. - Probeer de taal die is opgegeven door een
Content-Language-HTTP-header. Of, - Als geen van beide is opgegeven, gebruik dan de landinstelling van de browser.
Toegankelijkheid
Labels
Bij het opnemen van invoervelden is het een toegankelijkheidsvereiste om labels toe te voegen. Dit is nodig zodat gebruikers van ondersteunende technologieën kunnen zien waar het invoerveld voor is. Bovendien geeft het klikken of aanraken van een label focus aan het bijbehorende formulierbesturingselement. Dit verbetert de toegankelijkheid en bruikbaarheid voor ziende gebruikers, en vergroot het gebied waarop een gebruiker kan klikken of tikken om het formulierbesturingselement te activeren. Dit is met name nuttig (en zelfs noodzakelijk) voor keuzerondjes en selectievakjes, die erg klein zijn. Zie Labels hierboven voor meer algemene informatie over labels.
Hieronder staat een voorbeeld van hoe je het <label> kunt koppelen aan een <input>-element in bovenstaande stijl. Je moet het <input> een id-attribuut geven. Het <label> heeft dan een for-attribuut nodig waarvan de waarde gelijk is aan de id van het invoerveld.
<label for="peas">Do you like peas?</label>
<input type="checkbox" name="peas" id="peas" />Grootte
Interactieve elementen zoals formulierinvoervelden moeten een gebied bieden dat groot genoeg is om ze gemakkelijk te activeren. Dit helpt uiteenlopende gebruikers, waaronder mensen met motorische beperkingen en mensen die niet-nauwkeurige invoervormen gebruiken zoals een stylus of vingers. Een minimale interactieve grootte van 44×44 CSS-pixels wordt aanbevolen.
Technische samenvatting
| Inhoudscategorieën |
Flow content, opgesomd, verzendbaar, herstelbaar, formuliergebonden element,
phrasing content. Als het type niet
hidden is, dan een labelbaar element, tastbare inhoud (palpable content).
|
|---|---|
| Toegestane inhoud | Geen; het is een void element. |
| Tag weglaten | Moet een begintag hebben en mag geen eindtag hebben. |
| Toegestane ouders | Elk element dat phrasing content accepteert. |
| Impliciete ARIA-rol |
|
| Toegestane ARIA-rollen |
|
| DOM-interface | HTMLInputElement |