Naar de inhoud
Gratis naslagwerk over HTML
HTML leren en naslaan
Naslag / Formulieren

Het element <input>

Het <input>-element van HTML wordt gebruikt om interactieve besturingselementen te maken voor webformulieren, om gegevens van de gebruiker te accepteren; er is een breed scala aan invoertypen en besturingselementen beschikbaar, afhankelijk van het apparaat en de user agent. Het <input>-element is een van de krachtigste en complexste elementen in heel HTML, vanwege het grote aantal combinaties van invoertypen en attributen.

Code
<label for="name">Name (4 to 8 characters):</label>

<input
  type="text"
  id="name"
  name="name"
  required
  minlength="4"
  maxlength="8"
  size="10" />
Resultaat in de browser

\<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

accept

Alleen geldig voor het invoertype file; het accept-attribuut bepaalt welke bestandstypen selecteerbaar zijn in een file-uploadbesturingselement. Zie het invoertype file.

alpha Experimenteel

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.

alt

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.

autocapitalize

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.

autocomplete

(Geen booleaans attribuut!) Het autocomplete-attribuut neemt als waarde een door spaties gescheiden tekenreeks die beschrijft welk type automatisch-aanvullen-functionaliteit het invoerveld eventueel moet bieden. Een typische implementatie van automatisch aanvullen onthoudt eerder ingevoerde waarden in hetzelfde invoerveld, maar er kunnen ook complexere vormen van automatisch aanvullen bestaan. Een browser kan bijvoorbeeld integreren met de contactenlijst van een apparaat om email-adressen automatisch aan te vullen in een e-mailinvoerveld. Zie autocomplete voor toegestane waarden.

Het autocomplete-attribuut is geldig voor hidden, text, search, url, tel, email, date, month, week, time, datetime-local, number, range, color en password. Dit attribuut heeft geen effect op invoertypen die geen numerieke of tekstuele gegevens teruggeven; het is geldig voor alle invoertypen behalve checkbox, radio, file, of een van de knoptypen.

Zie het autocomplete-attribuut voor aanvullende informatie, waaronder informatie over wachtwoordbeveiliging en hoe autocomplete voor hidden licht anders werkt dan voor andere invoertypen.

autofocus

Een booleaans attribuut dat, indien aanwezig, aangeeft dat het invoerveld automatisch focus moet krijgen zodra de pagina klaar is met laden (of wanneer de <dialog> die het element bevat, wordt weergegeven).

Opmerking

Een element met het autofocus-attribuut kan al focus krijgen voordat het DOMContentLoaded-event wordt afgevuurd.

Niet meer dan één element in het document mag het autofocus-attribuut hebben. Als het op meerdere elementen wordt geplaatst, krijgt het eerste element met het attribuut focus.

Het autofocus-attribuut kan niet worden gebruikt bij invoervelden van het type hidden, aangezien verborgen invoervelden geen focus kunnen krijgen.

Let op

Het automatisch focussen van een formulierbesturingselement kan verwarrend zijn voor slechtziende mensen die schermlezers gebruiken en voor mensen met cognitieve beperkingen. Wanneer autofocus is ingesteld, "teleporteren" schermlezers hun gebruiker zonder waarschuwing vooraf naar het formulierbesturingselement.

Overweeg de toegankelijkheid zorgvuldig bij het toepassen van het autofocus-attribuut. Het automatisch focussen van een besturingselement kan ervoor zorgen dat de pagina bij het laden scrollt. De focus kan ook op sommige touchapparaten dynamische toetsenborden laten verschijnen. Een schermlezer kondigt weliswaar het label aan van het formulierbesturingselement dat focus krijgt, maar zal niets aankondigen van wat daarvoor komt, en ook een ziende gebruiker op een klein apparaat mist evenzeer de context die de voorafgaande inhoud biedt.

capture

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.

checked

Geldig voor zowel het radio- als het checkbox-type; checked is een booleaans attribuut. Indien aanwezig bij het radio-type geeft het aan dat dit keuzerondje het momenteel geselecteerde is in de groep gelijknamige keuzerondjes. Indien aanwezig bij het checkbox-type geeft het aan dat het selectievakje standaard is aangevinkt (wanneer de pagina wordt geladen). Het geeft niet aan of dit selectievakje op dit moment is aangevinkt: als de status van het selectievakje verandert, weerspiegelt dit contentattribuut die verandering niet. (Alleen het checked-IDL-attribuut van HTMLInputElement wordt bijgewerkt.)

Opmerking

In tegenstelling tot andere invoerbesturingselementen wordt de waarde van selectievakjes en keuzerondjes alleen meegestuurd in de verzonden gegevens als ze op dat moment checked zijn. Als dat zo is, worden de naam en de waarde(n) van de aangevinkte besturingselementen verzonden.

Als bijvoorbeeld een selectievakje met name gelijk aan fruit een value van cherry heeft, en het selectievakje is aangevinkt, dan bevatten de verzonden formuliergegevens fruit=cherry. Als het selectievakje niet actief is, staat het helemaal niet in de formuliergegevens. De standaard value voor selectievakjes en keuzerondjes is on.

colorspace Experimenteel

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:
  • "limited-srgb": De kleur bevindt zich in de sRGB-kleurruimte. Dit omvat waarden van rgb(), hsl(), hwb() en hex-color. De kleurwaarde is beperkt tot 8 bits per r-, g- en b-component. Dit is de standaardwaarde.
  • "display-p3": De Display P3-kleurruimte, bijv. color(display-p3 1.84 -0.19 0.72 / 0.6)

dirname

Geldig voor de invoertypen hidden, text, search, url, tel en email; het dirname-attribuut maakt het mogelijk de tekstrichting van het element mee te versturen. Indien opgenomen, verzendt het formulierbesturingselement twee naam/waarde-paren: het eerste is de name en value, en het tweede is de waarde van het dirname-attribuut als naam, met als waarde ltr of rtl, zoals ingesteld door de browser.

HTML
<form action="page.html" method="post">
  <label>
    Fruit:
    <input type="text" name="fruit" dirname="fruit-dir" value="cherry" />
  </label>
  <input type="submit" />
</form>
<!-- page.html?fruit=cherry&fruit-dir=ltr -->

Wanneer bovenstaand formulier wordt verzonden, zorgt het invoerveld ervoor dat zowel het name/value-paar fruit=cherry als het dirname/richting-paar fruit-dir=ltr worden verzonden. Zie voor meer informatie het dirname-attribuut.

disabled

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 click-event niet, en uitgeschakelde invoervelden worden niet met het formulier verzonden.

Opmerking

Hoewel niet vereist door de specificatie, zal Firefox standaard de dynamische disabled-status behouden van een <input> over paginaladingen heen. Gebruik het autocomplete-attribuut om dit gedrag te beheersen.

form

Een tekenreeks die het <form>-element aanduidt waarmee het invoerveld is geassocieerd (dat wil zeggen, de formuliereigenaar). De waarde van deze tekenreeks moet, indien aanwezig, overeenkomen met de id van een <form>-element in hetzelfde document. Als dit attribuut niet is opgegeven, wordt het <input>-element geassocieerd met het dichtstbijzijnde omsluitende formulier, indien aanwezig.

Met het form-attribuut kun je een invoerveld ergens anders in het document plaatsen, maar toch laten opnemen in een formulier elders in het document.

Opmerking

Een invoerveld kan slechts met één formulier geassocieerd worden.

formaction

Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie.

formenctype

Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie.

formmethod

Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie.

formnovalidate

Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie.

formtarget

Alleen geldig voor de invoertypen image en submit. Zie het invoertype submit voor meer informatie.

height

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.

id

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>.

inputmode

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.

list

De waarde van het list-attribuut moet de id zijn van een <datalist>-element in hetzelfde document. De <datalist> biedt een lijst met vooraf gedefinieerde waarden die aan de gebruiker worden voorgesteld voor dit invoerveld. Waarden in de lijst die niet compatibel zijn met het type worden niet opgenomen in de voorgestelde opties. De aangeboden waarden zijn suggesties, geen vereisten: gebruikers kunnen kiezen uit deze vooraf gedefinieerde lijst of een andere waarde opgeven.

Het is geldig voor text, search, url, tel, email, date, month, week, time, datetime-local, number, range en color.

Volgens de specificaties wordt het list-attribuut niet ondersteund door hidden, password, checkbox, radio, file, of een van de knoptypen.

Afhankelijk van de browser kan de gebruiker een aangepast kleurenpalet zien, streepjes langs een schuifbalk, of zelfs een invoerveld dat opent als een <select> maar ook niet-vermelde waarden toestaat. Raadpleeg de browsercompatibiliteitstabel voor de andere invoertypen.

Zie het <datalist>-element.

max

Geldig voor date, month, week, time, datetime-local, number en range; het bepaalt de hoogste waarde in het bereik van toegestane waarden. Als de value die in het element is ingevoerd deze overschrijdt, faalt het element bij validatie van beperkingen. Als de waarde van het max-attribuut geen getal is, heeft het element geen maximumwaarde.

Er is een speciaal geval: als het gegevenstype periodiek is (zoals bij datums of tijden), mag de waarde van max lager zijn dan die van min, wat aangeeft dat het bereik kan rondlopen; hiermee kun je bijvoorbeeld een tijdsbereik van 22.00 tot 4.00 uur opgeven.

maxlength

Geldig voor text, search, url, tel, email en password; het bepaalt de maximale tekenreekslengte (gemeten in UTF-16-code-eenheden) die de gebruiker in het veld kan invoeren. Dit moet een geheel getal van 0 of hoger zijn. Als er geen maxlength is opgegeven, of een ongeldige waarde is opgegeven, heeft het veld geen maximale lengte. Deze waarde moet ook groter dan of gelijk aan de waarde van minlength zijn.

Het invoerveld faalt bij validatie van beperkingen als de lengte van de in het veld ingevoerde tekst groter is dan maxlength UTF-16-code-eenheden. Standaard voorkomen browsers dat gebruikers meer tekens invoeren dan toegestaan door het maxlength-attribuut. Validatie van beperkingen wordt alleen toegepast wanneer de waarde door de gebruiker wordt gewijzigd. Zie Clientzijdige validatie voor meer informatie.

min

Geldig voor date, month, week, time, datetime-local, number en range; het bepaalt de laagste waarde in het bereik van toegestane waarden. Als de value die in het element is ingevoerd hier lager dan is, faalt het element bij validatie van beperkingen. Als de waarde van het min-attribuut geen getal is, heeft het element geen minimumwaarde.

Deze waarde moet kleiner dan of gelijk aan de waarde van het max-attribuut zijn. Als het min-attribuut aanwezig maar niet opgegeven of ongeldig is, wordt er geen min-waarde toegepast. Als het min-attribuut geldig is en een niet-lege waarde kleiner is dan het minimum dat is toegestaan door het min-attribuut, voorkomt validatie van beperkingen het verzenden van het formulier. Zie Clientzijdige validatie voor meer informatie.

Er is een speciaal geval: als het gegevenstype periodiek is (zoals bij datums of tijden), mag de waarde van max lager zijn dan die van min, wat aangeeft dat het bereik kan rondlopen; hiermee kun je bijvoorbeeld een tijdsbereik van 22.00 tot 4.00 uur opgeven.

minlength

Geldig voor text, search, url, tel, email en password; het bepaalt de minimale tekenreekslengte (gemeten in UTF-16-code-eenheden) die de gebruiker in het invoerveld kan invoeren. Dit moet een niet-negatief geheel getal zijn, kleiner dan of gelijk aan de waarde die is opgegeven door maxlength. Als er geen minlength is opgegeven, of een ongeldige waarde is opgegeven, heeft het invoerveld geen minimale lengte.

Het invoerveld faalt bij validatie van beperkingen als de lengte van de in het veld ingevoerde tekst korter is dan minlength UTF-16-code-eenheden, waardoor het verzenden van het formulier wordt voorkomen. Validatie van beperkingen wordt alleen toegepast wanneer de waarde door de gebruiker wordt gewijzigd. Zie Clientzijdige validatie voor meer informatie.

multiple

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.

name

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 name als een verplicht attribuut (ook al is het dat technisch niet). Als een invoerveld geen name heeft opgegeven, of name is leeg, wordt de waarde van het invoerveld niet met het formulier verzonden! (Uitgeschakelde besturingselementen, niet-aangevinkte keuzerondjes, niet-aangevinkte selectievakjes en reset-knoppen worden ook niet verzonden.)

Er zijn twee bijzondere gevallen:

  1. _charset_: als deze naam gebruikt wordt voor een <input>-element van het type hidden, wordt de value van het invoerveld automatisch door de user agent ingesteld op de tekencodering die gebruikt wordt om het formulier te verzenden.
  2. isindex: om historische redenen is de naam isindex niet toegestaan.

Het name-attribuut zorgt voor uniek gedrag bij keuzerondjes.

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 name krijgt, wordt die naam een eigenschap van de HTMLFormElement.elements-eigenschap van het bijbehorende formulierelement. Als je een invoerveld hebt waarvan name is ingesteld op guest, en een ander waarvan name is ingesteld op hat-size, kan de volgende code gebruikt worden:

JS
let form = document.querySelector("form");

let guestName = form.elements.guest;
let hatSize = form.elements["hat-size"];

Wanneer deze code is uitgevoerd, is guestName het HTMLInputElement voor het guest-veld, en hatSize het object voor het hat-size-veld.

Let op

Vermijd het geven van een name aan formulierelementen die overeenkomt met een ingebouwde eigenschap van het formulier, aangezien je dan de vooraf gedefinieerde eigenschap of methode zou overschrijven met deze verwijzing naar het bijbehorende invoerveld.

pattern

Geldig voor text, search, url, tel, email en password; het pattern-attribuut wordt gebruikt om een reguliere expressie te compileren waaraan de value van het invoerveld moet voldoen om de validatie van beperkingen te doorstaan. Het moet een geldige JavaScript-reguliere expressie zijn, zoals gebruikt door het RegExp-type, en zoals gedocumenteerd in onze gids over reguliere expressies. Er mogen geen schuine strepen om de patroontekst worden geplaatst. Bij het compileren van de reguliere expressie:

  1. wordt het patroon impliciet omwikkeld met ^(?: en )$, zodat de match vereist is tegen de volledige invoerwaarde, d.w.z. ^(?:<patroon>)$.
  2. wordt de 'v'-vlag opgegeven, zodat het patroon behandeld wordt als een reeks Unicode-codepunten in plaats van als ASCII.

Als het pattern-attribuut aanwezig maar niet opgegeven of ongeldig is, wordt er geen reguliere expressie toegepast en wordt dit attribuut volledig genegeerd. Als het pattern-attribuut geldig is en een niet-lege waarde niet overeenkomt met het patroon, voorkomt validatie van beperkingen het verzenden van het formulier. Als multiple aanwezig is, wordt de gecompileerde reguliere expressie vergeleken met elke door komma's gescheiden waarde.

Opmerking

Informeer, wanneer je het pattern-attribuut gebruikt, de gebruiker over het verwachte formaat door verklarende tekst in de buurt op te nemen. Je kunt ook een title-attribuut opnemen om uit te leggen wat de vereisten zijn om aan het patroon te voldoen; de meeste browsers tonen deze title als tooltip. De zichtbare uitleg is vereist voor toegankelijkheid. De tooltip is een verbetering.

Zie Clientzijdige validatie voor meer informatie.

placeholder

Geldig voor text, search, url, tel, email, password en number; het placeholder-attribuut biedt de gebruiker een korte hint over wat voor soort informatie in het veld verwacht wordt. Het moet een woord of korte zin zijn die een hint geeft over het verwachte type gegevens, in plaats van een uitleg of prompt. De tekst mag geen regeleinden bevatten. Als een veld bijvoorbeeld de voornaam van een gebruiker moet vastleggen en het label "First Name" is, kan een geschikte placeholder "bijv. Mustafa" zijn.

Opmerking

Het placeholder-attribuut is semantisch minder nuttig dan andere manieren om je formulier toe te lichten, en kan onverwachte technische problemen met je inhoud veroorzaken. Zie Labels voor meer informatie.

popovertarget

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:
  • De browser maakt een impliciete aria-details- en aria-expanded-relatie tussen de popover en de oproeper, en plaatst de popover op een logische positie in de volgorde van toetsenbordfocusnavigatie wanneer deze wordt weergegeven. Dit maakt de popover toegankelijker voor gebruikers van toetsenbord en ondersteunende technologie (zie ook Toegankelijkheidsfuncties van popovers).
  • De browser maakt een impliciete ankerverwijzing tussen de twee, wat het erg gemakkelijk maakt om popovers te positioneren ten opzichte van hun besturingselementen met behulp van CSS-ankerpositionering. Zie Popover-ankerpositionering voor meer details.

popovertargetaction

Bepaalt de actie die uitgevoerd moet worden op een popover-element dat wordt aangestuurd door een besturingselement <input type="button">. Mogelijke waarden zijn:
  • "hide"
    • : De knop verbergt een weergegeven popover. Als je probeert een al verborgen popover te verbergen, gebeurt er niets.
  • "show"
    • : De knop toont een verborgen popover. Als je probeert een al zichtbare popover te tonen, gebeurt er niets.
  • "toggle"
    • : De knop wisselt een popover tussen zichtbaar en verborgen. Als de popover verborgen is, wordt hij getoond; als de popover zichtbaar is, wordt hij verborgen. Als popovertargetaction wordt weggelaten, is "toggle" de standaardactie die door de besturingsknop wordt uitgevoerd.

readonly

Een booleaans attribuut dat, indien aanwezig, aangeeft dat de gebruiker de waarde van het invoerveld niet mag bewerken. Het readonly-attribuut wordt ondersteund door de invoertypen text, search, url, tel, email, date, month, week, time, datetime-local, number en password.

Zie het HTML-attribuut readonly voor meer informatie.

required

required is een booleaans attribuut dat, indien aanwezig, aangeeft dat de gebruiker een waarde voor het invoerveld moet opgeven voordat het bijbehorende formulier verzonden kan worden. Het required-attribuut wordt ondersteund door de invoertypen text, search, url, tel, email, date, month, week, time, datetime-local, number, password, checkbox, radio en file.

Zie Clientzijdige validatie en het HTML-attribuut required voor meer informatie.

size

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.

src

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.

step

Geldig voor date, month, week, time, datetime-local, number en range; het attribuut step is een getal dat de granulariteit opgeeft waaraan de waarde moet voldoen. Alleen waarden die een heel aantal stappen van de stapbasis verwijderd zijn, zijn geldig. De stapbasis is min indien opgegeven, anders value, of 0 als geen van beide is opgegeven (behalve voor week, dat een standaard stapbasis van −259.200.000 heeft, wat het begin van week 1970-W01 voorstelt).

Indien niet expliciet opgenomen:

  • is de standaardwaarde van step 1 voor number en range.
  • heeft elk datum-/tijd-invoertype een bij het type passende standaard step-waarde; zie de afzonderlijke invoerpagina's: date, datetime-local, month, time en week.

De waarde moet een positief getal zijn — geheel getal of kommagetal — of de speciale waarde any, wat betekent dat er geen stapgrootte wordt afgedwongen en elke waarde is toegestaan (afgezien van andere beperkingen, zoals min en max).

Als je bijvoorbeeld <input type="number" min="10" step="2"> hebt, is elk even geheel getal van 10 of hoger geldig. Bij weglating is bij <input type="number"> elk geheel getal geldig, maar kommagetallen (zoals 4.2) niet, omdat step standaard 1 is. Om 4.2 geldig te maken, had step ingesteld moeten worden op any, 0.1, 0.2, of de min-waarde had een getal moeten zijn dat eindigt op .2, zoals <input type="number" min="-5.2">.

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 :invalid-pseudoklasse.

Zie Clientzijdige validatie voor meer informatie.

switch Experimenteel Niet-standaard

Alleen geldig voor checkbox-invoervelden; switch is een booleaans attribuut dat aangeeft of het checkbox-invoerveld als schakelaar (switch) weergegeven moet worden.

Opmerking

Dit attribuut is nog experimenteel en heeft beperkte browserondersteuning. Het attribuut wordt genegeerd in niet-ondersteunende browsers.

tabindex

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.

title

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.

type

Een tekenreeks die het type van het te renderen besturingselement opgeeft. Om bijvoorbeeld een selectievakje te maken, wordt de waarde checkbox gebruikt. Als dit wordt weggelaten (of een onbekende waarde wordt opgegeven), wordt het invoertype text gebruikt, waardoor een tekstveld met platte tekst ontstaat.

Toegestane waarden staan hierboven vermeld bij Invoertypen.

value

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.

width

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 enterkeyhint.

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

incremental Niet-standaard

Het booleaanse attribuut incremental is een WebKit- en Blink-uitbreiding (dus ondersteund door Safari, Opera, Chrome, enz.) die, indien aanwezig, de user agent vertelt de invoer als een live zoekopdracht te verwerken. Terwijl de gebruiker de waarde van het veld bewerkt, stuurt de user agent search-events naar het HTMLInputElement-object dat het zoekvak voorstelt. Hierdoor kan je code de zoekresultaten in real time bijwerken terwijl de gebruiker de zoekopdracht bewerkt.

Als incremental niet is opgegeven, wordt het search-event alleen verzonden wanneer de gebruiker expliciet een zoekopdracht start (bijvoorbeeld door tijdens het bewerken van het veld op de toets Enter of Return te drukken).

Het search-event is snelheidsbeperkt, zodat het niet vaker wordt verzonden dan een door de implementatie bepaald interval.

orient Niet-standaard

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.

results Niet-standaard

Het results-attribuut — alleen ondersteund door Safari — is een numerieke waarde waarmee je het maximale aantal vermeldingen kunt overschrijven dat wordt weergegeven in het door het <input>-element van nature aangeboden vervolgkeuzemenu met eerdere zoekopdrachten.

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.

webkitdirectory Niet-standaard

Het booleaanse attribuut webkitdirectory geeft, indien aanwezig, aan dat alleen mappen door de gebruiker geselecteerd kunnen worden in de interface van de bestandskiezer. Zie HTMLInputElement.webkitdirectory voor aanvullende details en voorbeelden.

Hoewel oorspronkelijk alleen geïmplementeerd voor op WebKit gebaseerde browsers, is webkitdirectory ook bruikbaar in Microsoft Edge en in Firefox 50 en later. Ondanks de relatief brede ondersteuning is het echter nog steeds geen standaard en zou het niet gebruikt moeten worden tenzij er geen alternatief 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

Pseudoklassen die relevant zijn voor het <input> -element:
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.

HTML
<input id="checkboxInput" type="checkbox" />
<label for="checkboxInput">Toggle the checkbox on and off</label>
CSS
input:checked + label {
  color: red;
  font-weight: bold;
}
Resultaat in de browser

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.

CSS
/* 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.

CSS
::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

HTML
<label for="textInput">Note the red caret:</label>
<input id="textInput" class="custom" size="32" />

CSS

CSS
input.custom {
  caret-color: red;
  font:
    16px "Helvetica",
    "Arial",
    sans-serif;
}

Resultaat

Resultaat in de browser

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>:

HTML
<!-- 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.

Opmerking

Gebruik het placeholder-attribuut niet als je dat kunt vermijden. Als je een <input>-element moet labelen, gebruik dan het <label>-element.

Clientzijdige validatie

Let op

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:

HTML
<input type="time" min="20:00" max="08:00" name="overnight" />

Specifieke attributen en hun waarden kunnen leiden tot een specifieke fout in ValidityState:

Fouten in het validity-object hangen af van de attributen van <input> en hun waarden:
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.

JS
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:

HTML
<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:

JS
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:

Resultaat in de browser

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 het input-event.
  • Als de waarde ongeldig is, wordt een invalid-event afgevuurd en wordt de event-handlerfunctie voor invalid uitgevoerd. Binnen deze functie bepalen we, met behulp van een if ()-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 het input-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.
Opmerking

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.

Opmerking

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.

HTML
<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
  • type=button: button
  • type=checkbox: checkbox
  • type=email
    • zonder list-attribuut: textbox
    • met list-attribuut: combobox
  • type=image: button
  • type=number: spinbutton
  • type=radio: radio
  • type=range: slider
  • type=reset: button
  • type=search
    • zonder list-attribuut: searchbox
    • met list-attribuut: combobox
  • type=submit: button
  • type=tel
    • zonder list-attribuut: textbox
    • met list-attribuut: combobox
  • type=text
    • zonder list-attribuut: textbox
    • met list-attribuut: combobox
  • type=url
    • zonder list-attribuut: textbox
    • met list-attribuut: combobox
  • type=color|date|datetime-local|file|hidden|month|password|time|week: geen bijbehorende rol
Toegestane ARIA-rollen
  • type=button: checkbox, combobox, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab
  • type=checkbox: button wanneer gebruikt met aria-pressed, menuitemcheckbox, option, switch
  • type=image: link, menuitem, menuitemcheckbox, menuitemradio, radio, switch
  • type=radio: menuitemradio
  • type=text zonder list-attribuut: combobox, searchbox, spinbutton
  • type=color|date|datetime-local|email|file|hidden| month|number|password|range|reset|search|submit|tel|url|week of text met list-attribuut: geen role toegestaan
DOM-interface HTMLInputElement

Varianten van <input>

<input type="button"> <input>-elementen van het type button worden weergegeven als drukknoppen, die kunnen worden geprogrammeerd om... <input type="checkbox"> <input>-elementen van het type checkbox worden standaard weergegeven als vakjes die worden aangevinkt wanneer... <input type="color"> <input>-elementen van het type color bieden een gebruikersinterface-element waarmee een gebruiker een kleur ka... <input type="date"> <input>-elementen van type="date" maken invoervelden die de gebruiker een datum laten invoeren. Het uiterlijk... <input type="datetime-local"> <input>-elementen van het type datetime-local creëren invoerbedieningen waarmee de gebruiker eenvoudig zowel e... <input type="email"> <input>-elementen van het type email worden gebruikt om de gebruiker een e-mailadres te laten invoeren en bewe... <input type="file"> <input>-elementen met type="file" laten de gebruiker een of meer bestanden kiezen uit de opslag van hun appara... <input type="hidden"> <input>-elementen van het type hidden stellen webontwikkelaars in staat om gegevens in een formulier op te nem... <input type="image"> <input>-elementen van het type image worden gebruikt om grafische submit-knoppen te maken, dat wil zeggen subm... <input type="month"> <input>-elementen van het type month maken invoervelden die de gebruiker een maand en jaar laten invoeren, waa... <input type="number"> <input>-elementen van het type number worden gebruikt om de gebruiker een getal te laten invoeren. Ze bevatten... <input type="password"> <input>-elementen van het type password bieden de gebruiker een manier om op een veilige wijze een wachtwoord... <input type="radio"> <input>-elementen van het type radio worden meestal gebruikt in radiogroepen — verzamelingen radioknoppen die... <input type="range"> <input>-elementen van het type range laten de gebruiker een numerieke waarde opgeven die niet lager mag zijn d... <input type="reset"> <input>-elementen van het type reset worden weergegeven als knoppen, met een standaard click-gebeurtenishandle... <input type="search"> <input>-elementen van het type search zijn tekstvelden die zijn ontworpen zodat de gebruiker er zoekopdrachten... <input type="submit"> <input>-elementen van het type submit worden weergegeven als knoppen. Wanneer de click-gebeurtenis optreedt (m... <input type="tel"> <input>-elementen van het type tel worden gebruikt om de gebruiker een telefoonnummer te laten invoeren en bew... <input type="text"> <input>-elementen van het type text maken eenvoudige eenregelige tekstvelden. <input type="time"> <input>-elementen van het type time maken invoervelden aan die zijn ontworpen om de gebruiker eenvoudig een ti... <input type="url"> <input>-elementen van het type url worden gebruikt om de gebruiker een URL te laten invoeren en bewerken. <input type="week"> <input>-elementen van het type week creëren invoervelden die eenvoudige invoer mogelijk maken van een jaar plu...

Verwante elementen