HTML & CSS voor beginners

HTML & CSS voor beginners (Deel 17): Formulieren (5)

Alle video's van de tutorial HTML & CSS voor beginners

De autocompletiefunctie is inmiddels een veelgebruikte functie op internet. Wanneer je iets invoert in een formulier, bieden de browsers - indien de functie is ingeschakeld en door de browser wordt ondersteund - een lijst met woorsuggesties aan.

HTML & CSS voor beginners (Deel 17): Formulieren (5)

Dergelijke toepassingen kunnen nu zeer eenvoudig worden geïmplementeerd. Hiervoor wijs je het input-element het attribuut autocomplete toe.

<input type="text" autocomplete="on" />



Met de waarde on wordt de autocompletie voor dit veld geactiveerd. Vanaf dat moment onthoudt de browser de waarden die zijn ingevoerd in het veld en biedt deze later aan via een vervolgkeuzelijst. Zo kunnen formulieren aanzienlijk sneller worden ingevuld.

Nu is dit gedrag niet altijd gewenst voor elk veld. In zulke gevallen kan de autocompletie expliciet worden uitgeschakeld. Hiervoor wijs je het attribuut autocomplete de waarde off toe.

<input type="text" autocomplete="off" />



Als alternatief kan ook het form-element het autocomplete-attribuut bevatten. Afhankelijk van de waarde on of off wordt de autocompletiefunctie voor het hele formulier ingeschakeld of uitgeschakeld.

<form autocomplete="on">
..
</form>



Als tegenstrijdige informatie wordt verstrekt binnen het formulier, dan overrulen deze.

<form autocomplete="on">
   Naam: <input type="text" name="vname" autocomplete="off" /><br />
   Voornaam: <input type="text" name="nname" /><br />
   Postcode: <input type="text" name="plz" /><br />
   Plaats: <input type="text" name="ort" />
</form>



In dit voorbeeld zou de autocompletie op alle formulierenvelden worden toegepast, omdat in het inleidende form-element de waarde van autocomplete is ingesteld op on. De uitzondering is hier alleen het vname-veld. Want voor dit veld is het automatisch aanvullen expliciet uitgeschakeld.

Om de autocompletiefunctie te laten werken, moet deze functie worden ondersteund door de specifieke browser en mag deze niet zijn uitgeschakeld. Bovendien worden in de suggestielijst alleen waarden weergegeven die eerder zijn ingevoerd.

Om daadwerkelijk invloed te kunnen uitoefenen op de waarden in de suggestielijst, is met HTML5 het datalist-element geïntroduceerd. Dit element heeft geen visuele uitvoer in de browser. Met de onderliggende option-elementen kunnen waarden voor de suggestielijsten worden gedefinieerd. Een voorbeeld:

<div>
Taal:
<br />
<input type="text" autocomplete="on" list="sprache" />
</div>
<datalist id="sprache">
   <option value="HTML5"></option>
   <option value="XHTML"></option>
   <option value="PHP"></option>
   <option value="JavaScript"></option>
</datalist>



Met het list-attribuut van het input-element wordt een logische verbinding gemaakt tussen het invoerveld en het datalist-element. Hiervoor moeten dezelfde waarden worden gebruikt bij list en bij het id-attribuut van het datalist-element.

HTML & CSS voor beginners (Deel 17): Formulieren (5)

De focus instellen

Een formulierenveld kan automatisch de focus krijgen bij het laden van de pagina. Een dergelijke functie kom je bijvoorbeeld tegen op de startpagina van Google. Wanneer deze pagina wordt geladen, kun je meteen de zoekterm invoeren, zonder eerst de cursor handmatig in het zoek-/invoerveld te hebben geplaatst.

HTML & CSS voor beginners (Deel 17): Formulieren (5)

Voor dergelijke gevallen biedt HTML5 het autofocus-attribuut. Dit attribuut zorgt ervoor dat het formulierenveld dat hiermee is uitgerust automatisch de focus krijgt bij het laden van de pagina.

Een voorbeeld:

<form>
  <input name="suchfeld" autofocus="autofocus" />
  <input type="submit" value="Zoeken" />
</form>



Browsers die het autofocus-attribuut niet kennen, negeren het eenvoudig. Dit negeren heeft geen negatieve gevolgen (waarbij het veld dan vanzelfsprekend niet gefocust wordt).

Invoer controleren

Tot dusver zijn formulierinput met HTML-standaardmiddelen alleen niet te controleren. Als je bijvoorbeeld wilde controleren of een gebruiker daadwerkelijk een e-mailadres heeft ingevoerd in een formulier, moest je meestal terugvallen op JavaScript of PHP. In HTML5 zijn dergelijke "kunstgrepen" niet langer nodig. Want vanaf nu bevat HTML een validatie-API. En die is zeker de moeite waard. Met zeer weinig inspanning kunnen formulierinput vanaf nu worden gecontroleerd.

HTML5 heeft enkele regels waarmee wordt bepaald op welke manier velden worden gevalideerd. Zo worden bijvoorbeeld invoervelden van het type email gecontroleerd op een syntactisch correct e-mailadres.

url - controleert op URL

email - controleert op e-mailadres

range - controleert op zwevendekommagetallen

number - controleert op zwevendekommagetallen

Om een veld als verplicht veld aan te duiden, wordt het attribuut required eraan toegewezen.

<input id="vname" name="vname" type="text" required="required" />



Een veld dat op deze manier is gemarkeerd, moet worden ingevuld en mag dus niet leeg zijn.

Maar let op: om velden te valideren, moeten bepaalde voorwaarden worden vervuld.

• Het element moet de attribuutnaam name toegewezen krijgen.

• Het element moet binnen een form-element staan, dus zich binnen een HTML-formulier bevinden. Als alternatief kan de verbinding met het formulier ook worden gemaakt via het attribuut form.

• Het element mag niet de attributen readonly of disabled hebben.

Het correcte gebruik zou er dus als volgt uit zien:

<form action="form.php">
    <input id="vname" name="vname" type="text" required="required" />
    <input type="submit" />
 </form>



Hier zou de browser controleren of het veld is ingevuld. Als het veld leeg is en er toch wordt geprobeerd het formulier te verzenden, zou de browser nu een foutmelding moeten geven.

HTML & CSS voor beginners (Deel 17): Formulieren (5)

In deze reeks is al meerdere malen gewezen op de formulier veldtypen email, range, number, tel en url. Deze velden worden niet alleen gecontroleerd op het bevatten van een waarde, maar ook op de juistheid van de ingevoerde waarde.

<form action="form.php">
    <input id="email" name="email" type="email" />
    <input type="submit" />
 </form>



Bij velden van het type email wordt bijvoorbeeld gecontroleerd of de ingevoerde waarde daadwerkelijk een syntactisch correct e-mailadres is. Als dat niet het geval is, geeft de browser een foutmelding.

HTML & CSS voor beginners (Deel 17): Formulieren (5)



De browsers zijn verantwoordelijk voor het weergeven van de foutmeldingen.

Velden niet automatisch laten controleren

Niet in alle gevallen is automatische validatie van de invoer wenselijk. Als u de validatie van het hele formulier wilt uitschakelen, kent u het inleidende form-element het attribuut novalidate toe.

<form action="form.php" novalidate>
    <input id="email" name="email" type="email" />
    <input type="submit" />
 </form>



Als alternatief kan het attribuut formnovalidate aan een verzendknop worden toegevoegd. Dit is bijvoorbeeld interessant als u naast een verzendknop ook een knop voor het tussentijds opslaan van het formulier aanbiedt.

<form action="form.cgi" method="post">
    <input id="email" name="email" type="email" />
    <input type="submit" name="submit" value="Verzenden" />
    <input type="submit" 
    formnovalidate="formnovalidate"  value="Opslaan" />
    <input type="submit" 
    formnovalidate="formnovalidate" value="Uitloggen" />
 </form>



In dit geval wordt het formulier alleen gevalideerd via de eerste verzendknop. De andere twee dienen voor het opslaan en uitloggen. Validatie is in deze gevallen niet nodig.