Laboratorio di Tecnologie Web
HTML: Form
Dott. Stefano Burigat
www.dimi.uniud.it/burigat
Il ruolo dei form
I form sono al giorno d'oggi un componente essenziale per
l'interazione degli utenti con i siti web, essendo alla base di
azioni come gli acquisti online, le prenotazioni, le ricerche,
i post sui blog o i social network, le richieste di assistenza,
etc.
In risposta a questa sempre maggiore interattività dei siti
web, HTML5 ha introdotto nuovi elementi ed attributi che
rendono più facile l'utilizzo dei form per gli utenti e la loro
creazione per gli sviluppatori, rendendo effettuabili tramite
codice html alcuni compiti che in precedenza potevano
essere gestibili solo via JavaScript. Le novità introdotte non
sono attualmente supportate in modo completo dai browser
ma sono comunque retrocompatibili.
L'utilizzo dei form prevede l'interazione tra due
componenti, un componente client HTML costituito dai
diversi controlli (pulsanti, campi per l'input, menu, etc.)
utilizzati per raccogliere le informazioni dagli utenti ed un
componente server costituito da un'applicazione o script che
elabora l'informazione acquisita dal form e ritorna una
opportuna risposta.
L'elemento <form>
I form vengono aggiunti alle pagine web mediante l'utilizzo
dell'elemento <form>, che racchiude tutti i controlli del
form oltre a poter includere altri elementi di tipo blocco (ad
esempio titoli, paragrafi, liste, etc.). Gli elementi <form>
non possono essere innestati.
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="post">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<div>
<p>
Nome: <input type="text" name="username" />
</p>
</div>
<div>
<p>
Email: <input type="text" name="email" />
</p>
</div>
<div>
<p>
<input type="submit" value="Iscriviti" />
</p>
</div>
</form>
</body>
</html>
Gli attributi “action” e “method” dell'elemento <form>
sono necessari per l'interazione con il componente server.
L'attributo “action” viene utilizzato per specificare l'URL
dell'applicazione o script che verrà utilizzato lato server per
elaborare i dati inseriti dall'utente (nell'esempio sopra, verrà
chiamato lo script mailinglist.php contenuto nella directory
script). A volte, il codice per l'elaborazione dei dati viene
inserito direttamente all'interno del file html. In tal caso, il
valore dell'attributo “action” deve essere lasciato vuoto.
L'attributo “method” specifica come l'informazione deve
essere inviata al server. Consideriamo ad esempio di
inserire Pinco Pallino nel campo Nome e
[email protected] nel campo Email dell'esempio
precedente. Tale informazione viene codificata
automaticamente dal browser nel modo seguente
username=Pinco%20Pallino&email=pinco.pallino%40example.com
(in cui i caratteri non ammessi sono stati trasformati nel
loro equivalente esadecimale) e inviata al server in due
possibili modi, POST o GET, che vengono inseriti come
valore dell'attributo “method”. Se tale attributo non è
presente, il valore utilizzato di default è GET.
Quando il metodo utilizzato è POST, il browser invia al
server una richiesta separata che contiene un'intestazione
speciale seguita dai dati. Solo il server può vedere il
contenuto di tale richiesta ed il metodo POST è quindi
preferibile quando si voglia inviare informazioni riservate
come numeri di carta di credito o altri dati personali. Tale
metodo è preferibile anche quando si deve inviare una
grande quantità di dati.
Quando il metodo utilizzato per l'invio dei dati è GET, i dati
vengono aggiunti direttamente in fondo all'URL definito
tramite l'attributo “action”, separati dal simbolo ? (punto di
domanda). Tale metodo è appropriato se si vuole che
l'utente possa salvare un segnalibro della pagina chiamata
(che può ad esempio rappresentare i risultati di
un'interrogazione ad un motore di ricerca). D'altra parte, le
informazioni inviate sono visibili direttamente.
All'interno dell'elemento <form> vengono inseriti i controlli
che permettono l'interazione con l'utente come campi di
testo, pulsanti, menu, etc. Nell'esempio precedente sono
presenti due campi di testo ed un pulsante che provoca
l'invio dei dati al server. L'attributo “name” di un controllo
definisce il nome della variabile alla quale sarà associato il
contenuto inserito dall'utente tramite quel controllo (notate
che il controllo di tipo pulsante nell'esempio precedente non
ha bisogno di un nome in quanto la sua funzione non è
raccogliere dati). L'applicazione o script che elaborerà i dati
utilizzerà tali nomi per estrarre e manipolare i valori
inseriti. Per questo motivo, ogni variabile deve avere un
nome univoco.
Controlli per i form
In HTML5 ci sono 23 tipi diversi di controlli inseribili in un
form. La maggior parte di questi controlli viene specificata
utilizzando l'elemento <input>, il cui aspetto e la cui
funzionalità variano in base al valore dell'attributo “type”.
Controlli per l'inserimento di testo
Uno dei task più comuni in un form è inserire informazione
testuale. A tale scopo, si possono utilizzare l'elemento vuoto
<input> o l'elemento contenitore <textarea> a seconda che
si voglia permettere l'inserimento di una o più di una riga di
testo, rispettivamente.
Nel primo caso, si utilizza l'elemento <input> con attributo
“type” impostato a text. Tale valore è il default per quanto
riguarda l'elemento <input> e viene quindi utilizzato anche
quando non si specifica l'attributo “type” o quando il valore
dell'attributo “type” non è riconosciuto dal browser. Oltre
agli attributi “type” e “name”, altri attributi comuni per
questo controllo sono “value” che specifica del testo da far
comparire nel campo di input al caricamento del form o
quando il form viene resettato, “maxlength” che specifica il
numero massimo di caratteri che l'utente può inserire nel
campo di testo (di default, il numero di caratteri è illimitato)
e “size” che specifica la dimensione del controllo in
caratteri.
L'elemento <textarea> permette di inserire un campo
multilinea scrollabile in cui gli utenti possono scrivere del
testo. Al contrario di <input>, <textarea> consente di
aggiungere del contenuto tra i tag di apertura e chiusura.
Tale contenuto verrà visualizzato nel campo di testo al
caricamento del form ma verrà anche inviato al server
assieme ai dati inseriti dall'utente. Per questo motivo, è
comune non inserire nulla come contenuto dell'elemento ed
utilizzare gli attributi “title” o “placeholder” per dare
suggerimenti all'utente su come usare il campo di testo.
L'attributo “placeholder” è stato introdotto in HTML5 e può
essere usato in tutti i controlli per l'inserimento di testo.
Oltre a “maxlength”, visto sopra per l'elemento <input>,
<textarea> supporta gli attributi <rows> e <cols> per
specificare le dimensioni dell'area di testo in righe e
colonne (numero di caratteri). E' comunque preferibile
usare CSS per specificare tali parametri. Infine, è possibile
usare l'attributo “wrap” per specificare se si devono
escludere (valore soft) o includere (valore hard) dai dati
inviati al server le interruzioni di riga inserite
automaticamente quando viene raggiunto il valore
dell'attributo “cols” (che deve essere specificato) durante la
digitazione.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Lascia un commento</h1>
<form action="script/mailinglist.php" method="get">
<p>Usa questo form per darci un'opinione sui nostri
prodotti.</p>
<div>
<p>
Nome: <br/>
<input type="text" name="username" />
</p>
</div>
<div>
<p>
Commento: <br />
<textarea name="commento" placeholder="Max 10
caratteri" maxlength="15" wrap="hard" cols="5"></textarea>
</p>
</div>
<div>
<p>
<input type="submit" value="Iscriviti" />
</p>
</div>
</form>
</body>
</html>
In aggiunta ai due controlli generici per l'inserimento di
testo che abbiamo appena visto, esistono controlli specifici
per informazioni come le password, gli indirizzi email ed
altro. Per creare tali controlli, si utilizzano appositi valori
dell'attributo “type” dell'elemento <input> (e si possono
utilizzare gli stessi attributi utilizzati per il controllo
generico di tipo text). Se “type” ha valore password, i
caratteri inseriti dall'utente vengono oscurati (di solito
tramite un asterisco o un pallino). E' importante tenere
presente che anche se i caratteri non sono visibili,
l'informazione inserita non è criptata.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Login</h1>
<form action="script/login.php" method="post">
<p>Inserisci username e password per effettuare il
login.</p>
<div>
<p>
Username: <input type="text" name="username" />
</p>
</div>
<div>
<p>
Password: <input type="password" name="pwd"
maxlength="8" />
</p>
</div>
<div>
<p>
<input type="submit" value="Accedi" />
</p>
</div>
</form>
</body>
</html>
Impostando l'attributo “type” dell'elemento <input> ai
valori search, email, tel o url otteniamo rispettivamente dei
controlli per l'inserimento di un campo di ricerca, di
indirizzi email, di numeri telefonici e di URL. I browser
possono sfruttare questa informazione per gestire al meglio
l'input, ad esempio mostrando un tastierino adattato al tipo
di dati da immettere (su dispositivi mobili) o effettuando
automaticamente dei controlli sulla correttezza dei dati
inseriti (ad esempio, per la sintassi degli indirizzi email). Se
il tipo non è riconosciuto dal browser, i dati inseriti
vengono considerati testo generico.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Input types</h1>
<form action="script/form.php" method="get">
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
<p>
Search: <br/> <input type="search"
name="search" />
</p>
</div>
<div>
<p>
Telephone: <br/> <input type="tel" name="phone"
/>
</p>
</div>
<div>
<p>
URL: <br/> <input type="url" name="url" />
</p>
</div>
<div>
<p>
<input type="submit" value="Accedi" />
</p>
</div>
</form>
</body>
</html>
Pulsanti
Diversi tipi di pulsanti possono essere inseriti nei form
html. Il più comune è il pulsante submit che, quando
premuto, viene utilizzato per l'invio al server dei dati
inseriti nel form. Un altro pulsante utilizzato spesso è il
pulsante di reset che serve a ripristinare lo stato iniziale dei
controlli presenti in un form (il che non significa solo pulire
i singoli campi).
Entrambi i pulsanti menzionati vengono aggiunti tramite
l'utilizzo dell'elemento <input> con attributo “type”
impostato ai valori submit o reset. L'attributo “name” non è
necessario (anche se si può impostare) in quanto la funzione
del pulsante non è l'inserimento dati. L'attributo “value”
può essere utilizzato per impostare il testo visualizzato sul
pulsante (in generale, “value” specifica il valore iniziale di
un controllo).
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Login</h1>
<form action="script/login.php" method="post">
<p>Inserisci email e password per effettuare il
login.</p>
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
<p>
Password: <br/> <input type="password"
name="pwd" maxlength="8" />
</p>
</div>
<div>
<p>
<input type="submit" value="Accedi" />
<input type="reset" />
</p>
</div>
</form>
</body>
</html>
L'elemento <input> con attributo “type” impostato a image
permette di creare un pulsante submit con un'immagine.
L'immagine da utilizzare viene specificata tramite attributo
“url” (con la solita sintassi) mentre è opportuno utilizzare
l'attributo “alt” per migliorare l'accessibilità.
Se si vuole avere maggiore flessibilità nella creazione di un
pulsante si possono utilizzare l'elemento <input> con
attributo “type” impostato a button oppure l'elemento
contenitore <button>. Nel primo caso, il comportamento
del pulsante deve essere specificato tramite JavaScript. Nel
secondo caso, ciò che viene visualizzato sul pulsante viene
inserito come contenuto dell'elemento (ad esempio, testo
e/o immagini) e l'attributo “type” può assumere i valori
submit, reset, button o menu (che permette di ottenere lo
stesso comportamento del rispettivo elemento <input> con
lo stesso tipo).
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Login</h1>
<form action="script/login.php" method="get">
<p>Inserisci email e password per effettuare il
login.</p>
<div>
<p>
Email: <br/> <input type="email" name="email">
</p>
</div>
<div>
<p>
Password: <br/> <input type="password"
name="pwd" maxlength="8">
</p>
</div>
<div>
<p>
<input type="image" src="imgs/submit.png"
alt="pulsante accedi" width="94" height="30"> <br/>
<button type="reset">Reset <img
src="imgs/reset.png" alt="" width="25" height="20"/></button>
</p>
</div>
</form>
</body>
</html>
I pulsanti di tipo checkbox e di tipo radio supportano la
creazione di gruppi di opzioni e la selezione di elementi
all'interno di un gruppo. In un gruppo presentato tramite
checkbox, l'utente può selezionare una o più opzioni tra
quelle elencate mentre in un gruppo presentato tramite radio
button può essere selezionata una sola opzione.
Le chechbox vengono inserite in un form tramite utilizzo
dell'elemento <input> con attributo “type” impostato a
checkbox. Per creare un gruppo di checkbox, si specifica lo
stesso valore dell'attributo “name” per ogni checkbox del
gruppo (è comunque possibile creare singole checkbox
come nel caso delle informative sulla privacy). L'attributo
“value” viene utilizzato per specificare il valore che verrà
inviato al server se la rispettiva checkbox risulta
selezionata. Infine, se si vuole che una checkbox risulti già
selezionata al caricamento del form, si utilizza l'attributo
“checked” (essendo un attributo binario, in HTML5 è
sufficiente specificare il nome dell'attributo senza valore).
I radio button vengono inseriti in un form tramite utilizzo
dell'elemento <input> con attributo “type” impostato a
radio. La loro configurazione avviene utilizzando gli stessi
attributi descritti sopra per le checkbox (l'unica differenza è
che un solo elemento di un gruppo può essere nello stato
selezionato).
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="get">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<div>
<p>
Nome: <br/> <input type="text" name="username"
/>
</p>
</div>
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
Età: <br/>
<ul>
<li><input type="radio" name="age"
value="under24" />Meno di 24</li>
<li><input type="radio" name="age"
value="25-44" />Tra 25 e 44</li>
<li><input type="radio" name="age"
value="over 45" />Oltre 45</li>
</ul>
</div>
<div>
Argomenti d'interesse: <br/>
<ul>
<li><input type="checkbox" name="topic"
value="tecnologia" checked />Tecnologia</li>
<li><input type="checkbox" name="topic"
value="motori" />Motori</li>
<li><input type="checkbox" name="topic"
value="viaggi" />Viaggi</li>
</ul>
</div>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Menu
Un altro modo per permettere la selezione di opzioni
ottimizzando lo spazio occupato è quello di utilizzare menu
di tipo drop-down o scrollabili. Entrambi i tipi di menu
vengono inseriti in un form utilizzando l'elemento
contenitore <select>. Di default, l'elemento <select> crea
un menu di tipo drop-down. All'interno dell'elemento
<select> vengono inseriti tanti elementi contenitore di tipo
<option> quante sono le voci di menu. Il contenuto
dell'elemento <option> è ciò che viene visualizzato
all'utente ed inviato al server se quella voce di menu viene
selezionata (il valore inviato al server può essere modificato
utilizzando l'attributo “value” di <option>). L'attributo
binario “selected” può essere specificato all'interno di un
elemento <option> per indicare che quell'elemento è
l'elemento di default del menu.
Se viene specificato l'attributo “size” dell'elemento <select>
con un valore maggiore di 1, allora il menu che viene
visualizzato è di tipo scrollabile. Il numero di voci di menu
visibili è pari al valore di “size” (i browser, di default,
potrebbero comunque visualizzare un numero di voci
superiore) e l'attributo binario “multiple” può essere
specificato per indicare che l'utente può selezionare più di
una voce. E' anche possibile utilizzare l'elemento
<optgroup> per suddividere le voci di menu in sottogruppi.
L'attributo obbligatorio “label” di <optgroup> viene
utilizzato per dare un nome al sottogruppo.
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="get">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<div>
<p>
Nome: <br/> <input type="text" name="username"
/>
</p>
</div>
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
<p>
Età: <br/>
<select name="age">
<option>Meno di 24</option>
<option selected>Tra 25 e 44</option>
<option>Oltre 45</option>
</select>
</p>
</div>
<div>
<p>
Argomenti d'interesse: <br/>
<select name="topic" size="3" multiple>
<optgroup label="Gruppo1">
<option value="Tech" selected
>Tecnologia</option>
<option>Motori</option>
</optgroup>
<optgroup label="Gruppo2">
<option selected>Viaggi</option>
<option>Cucina</option>
<option>Sport</option>
</optgroup>
</select>
</p>
</div>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Il nuovo elemento <datalist> di HTML5 premette di creare
menu di tipo drop-down di valori suggeriti per qualunque
elemento per l'inserimento di testo. Al contrario dei menu
visti in precedenza, l'utente mantiene comunque la
possibilità di inserire valori non presenti nella lista.
All'interno di <datalist> vengono inseriti elementi <option>
per i diversi suggerimenti. Inoltre, è necessario specificare
l'attributo “id” dell'elemento <datalist> e inserire tale
identificatore come valore dell'attributo <list> dell'elemento
<input> a cui saranno associati i suggerimenti.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Datalist</h1>
<form action="script/list.php" method="post">
<p>Titolo di studio: <input type="text"
list="titolostudio" name="educazione">
<datalist id="titolostudio">
<option value="Laurea" />
<option value="Laurea Magistrale" />
<option value="PhD" />
</datalist>
</form>
</body>
</html>
Selezione di file
Oltre a permettere la compilazione di campi, i form
possono essere utilizzati per la sottomissione di file tramite
l'utilizzo di un apposito controllo definito tramite l'elemento
<input> con attributo “type” impostato a file. Il controllo
effettivamente visualizzato varia drasticamente da browser
a browser. Se un form contiene un elemento per la selezione
di file, è necessario specificare l'attributo “enctype”
dell'elemento <form> al valore multipart/form-data e
l'attributo “method” al valore POST. L'attributo “multiple”
può essere usato per consentire la sottomissione di più di un
file contemporaneamente.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Iscrizione alla conferenza</h1>
<form action="script/signup.php" method="post"
enctype="multipart/form-data">
<p>Compila i campi sottostanti per iscriverti alla
conferenza.</p>
<div>
<p>
Nome: <br/> <input type="text" name="username"
/>
</p>
</div>
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
<p>
Curriculum: <br/> <input type="file"
name="curriculum" />
</p>
</div>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Controlli nascosti
Quando è necessario inviare al server che elabora il form
delle informazioni che non provengono dall'utente, si
possono utilizzare dei controlli nascosti non visibili sul
form. I controlli nascosti vengono aggiunti tramite
l'elemento <input> con attributo “type” impostato a hidden.
Tipicamente, gli attributi “name” e “value” vengono
utilizzati per specificare i dati da inviare.
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="get">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<div>
<p>
Nome: <br/> <input type="text" name="username"
/>
</p>
</div>
<div>
<p>
Email: <br/> <input type="email" name="email"
/>
</p>
</div>
<div>
<input type="hidden" name="returnpage"
value="thankyou.html"/>
</div>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Data e ora
Per consentire agli utenti di specificare orari e date
all'interno di un form, HTML5 mette a disposizione
l'elemento <input> con attributo “type” impostato a date,
time, datetime, datetime-local, month o week. I browser che
non supportano tali valori, interpreteranno questi controlli
come controlli per l'inserimento di testo semplice.
L'attributo “value” può essere utilizzato per specificare la
data o orario da visualizzare inizialmente (in formato ISO
come descritto in precedenza per l'attributo “datetime”
dell'elemento <time>).
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Lista dei controlli per l'inserimento di data e
ora</h1>
<form action="script/dataora.php" method="post">
<ul>
<li>Data: <br/>
<input type="date" name="date" value="2014-0312"/></li>
<li>Ora: <br/>
<input type="time" name="time"
value="09:13:00"/></li>
<li>Data e ora: <br/>
<input type="datetime" name="datetime"
value="2014-01-14T03:13:00-5:00"/></li>
<li>Data e ora (senza fuso): <br/>
<input type="datetime-local" name="datetimelocal" value="2014-01-14T03:13:00"/></li>
<li>Mese: <br/>
<input type="month" name="month" value="201401"/></li>
<li>Settimana: <br/>
<input type="week" name="week" value="2014W2"/></li>
</ul>
</form>
</body>
</html>
Input numerici
HTML5 ha introdotto due nuovi elementi da utilizzare nei
form, <number> e <range>, che permettono agli utenti di
specificare un valore numerico. I due elementi variano per
il modo in cui vengono visualizzati all'utente, con il
secondo normalmente mostrato come uno slider. Gli
attributi “min” e “max” possono essere usati per definire
l'intervallo di valori ammessi mentre l'attributo “step” può
essere utilizzato per specificare l'incremento tra un valore
ed il successivo (di default, vale 1 ma può essere impostato
a al valore any per permettere l'inserimento di qualsiasi
incremento).
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Inserimento di valori numerici</h1>
<form action="script/dataora.php" method="post">
<ul>
<li>Number: <br/>
<input type="number" name="number" min="1"
max="6" step="0.5"></li>
<li>Range (da 0 a 10): <br/>
<input type="range" name="range" min="0"
max="10"></li>
</ul>
</form>
</body>
</html>
Attributi utili dell'elemento <input>
Oltre agli attributi “type”, “name”, “value” e altri più
specifici che abbiamo già visto, l'elemento <input>
supporta altri attributi che possono risultare utili in alcuni
casi.
Se si vuole mantenere un controllo visibile ma impedire
all'utente di modificarne il contenuto, è possibile utilizzare
gli attributi “disabled” e “readonly”. Il primo impedisce la
selezione del controllo, che di solito viene visualizzato con
uno sfondo grigio. Il valore contenuto in un campo disabled
non viene inviato al server. L'attributo “readonly” ha un
effetto simile a “disabled”, impedendo la modifica del
campo da parte dell'utente, ma il valore del campo viene
inviato al server. Attraverso script JavaScript è possibile
modificare lo stato ed il contenuto di tali controlli.
L'attributo “form” consente di specificare l'identificatore
del form al quale il controllo è associato. Con questo
attributo non è necessario che un controllo sia inserito
all'interno del form di cui fa logicamente parte.
L'attributo “required” viene utilizzato per indicare che la
compilazione di quel campo è obbligatoria. Se l'utente non
compila il campo prima dell'invio del form, il browser può
visualizzare un apposito messaggio di avviso.
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Attributi di input</h1>
<form action="script/attr.php" method="get">
<ul>
<li>Disabled: <br/>
<input type="text" name="disabled" value="Non
modificabile" disabled/></li>
<li>Readonly: <br/>
<input type="text" name="readonly" value="Sola
lettura" readonly/></li>
<li>Required: <br/>
<input type="text" name="required"
required/></li>
</ul>
<div>
<p>
<input type="submit" value="Invia" />
</p>
</div>
</form>
</body>
</html>
Altri controlli HTML5 per i form
L'elemento <input> con attributo “type” impostato a color
permette di far comparire un controllo per la selezione di un
colore.
L'elemento <progress> viene utilizzato per dare del
feedback all'utente sul completamento di un'operazione
come lo scaricamento di un file. Il livello di completamento
viene specificato tramite l'attributo “value” (o nel corpo
dell'elemento ma ciò non sembra essere supportato dai
browser) e di solito viene modificato via JavaScript. Si può
utilizzare l'attributo “max” per specificare il valore finale.
Se “value” non è presente, viene presentata un'indicazione
continua di operazione in corso.
L'elemento <meter> è simile a <progress> ma viene
utilizzato per mostrare il livello di un qualche parametro o
misurazione all'interno di uno specifico intervallo di valori.
L'intervallo viene specificato utilizzando gli attributi “min”
e “max”. E' anche possibile indicare delle soglie di
sicurezza minime e massime con gli attributi “low” e
“high”. Il livello corrente viene specificato tramite
l'attributo “value” ed il browser segnala se questo supera le
soglie di sicurezza (di solito utilizzando il colore).
<!DOCTYPE html>
<html>
<head>
<title>Titolo</title>
</head>
<body>
<h1>Altri elementi HTML5</h1>
<form action="script/other.php" method="post">
<ul>
<li>Color: <br/>
<input type="color" name="colore"></li>
<li>Progress: <br/>
<progress name="feedback" value="50"
max="100"></progress></li>
<li>Meter: <br/>
<meter name="meter" min="0" max="100" low="25"
high="75" value="50"></meter></li>
</ul>
</form>
</body>
</html>
L'elemento <output>, già incontrato e descritto in
precedenza, fornisce un modo per marcare il risultato di
uno script o applicazione.
L'elemento <keygen> viene utilizzato per la generazione di
chiavi che vengono utilizzate nella gestione di certificati
web.
Accessibilità dei form
Per rendere i form più accessibili dal punto di vista della
comprensibilità e della navigazione, è possibile utilizzare
gli elementi <label>, <fieldset> e <legend>.
Nonostante di solito i campi in un form vengano
visualizzati assieme ad una qualche etichetta che ne
identifica lo scopo, i due oggetti hanno solo una relazione
visiva che si perde ad esempio se il form viene letto tramite
screen reader. L'elemento <label> può essere utilizzato per
associare esplicitamente del testo descrittivo ad uno
specifico campo. Ogni elemento <label> è associato
esattamente ad un controllo in un form e può essere
utilizzato in due modi. Il primo metodo, detto associazione
implicita, consiste nel racchiudere il controllo che si vuole
descrivere all'interno dell'elemento <label>. Il secondo
metodo, l'associazione esplicita, permette di associare una
label all'identificatore di un controllo mediante l'utilizzo
dell'attributo “for”. Il vantaggio dell'associazione esplicita è
che l'elemento <label> e il controllo a cui si riferisce
restano distinti e possono essere meglio controllati a livello
di stile. L'esempio seguente mostra entrambi i metodi.
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="get"
id="form-mailinglist">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<div>
<p>
<label for="form-mailinglistusername">Nome:</label> <br/>
<input type="text" name="username" id="formmailinglist-username" />
</p>
</div>
<div>
<p>
<label for="form-mailinglistemail">Email:</label> <br/>
<input type="email" name="email" id="formmailinglist-email" />
</p>
</div>
<div>
Argomenti d'interesse: <br/>
<ul>
<li><label><input type="checkbox"
name="topic" value="tecnologia" checked
/>Tecnologia</label></li>
<li><label><input type="checkbox"
name="topic" value="motori" />Motori</label></li>
<li><label><input type="checkbox"
name="topic" value="viaggi" />Viaggi</label></li>
</ul>
</div>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Notate che gli id utilizzati sono strutturati in modo tale da
semplificare il riconoscimento del form di cui fanno parte
(questo è utile per migliorare l'organizzazione dei form e
distinguere i controlli dei form da altri id utilizzati nella
pagina).
Un ultimo vantaggio nell'utilizzo dell'elemento <label> è
che il testo contenuto al suo interno può essere cliccato per
selezionare il corrispondente controllo il che risulta utile
soprattutto nel caso di checkbox e radiobutton (ma iOS non
sembra compatibile con tale comportamento).
L'elemento <fieldset> può essere utilizzato per raggruppare
logicamente i controlli di un form. All'interno di tale
elemento può anche essere inserito un elemento <legend>
che rappresenta una didascalia per il gruppo.
<!DOCTYPE html>
<html>
<head>
<title>Iscrizione alla mailing list</title>
</head>
<body>
<h1>Iscrizione alla mailing list</h1>
<form action="script/mailinglist.php" method="get"
id="form-mailinglist">
<p>Iscriviti alla mailing list per ottenere
informazioni sui nostri prodotti.</p>
<fieldset>
<legend>Informazioni obbigatorie</legend>
<div>
<p>
<label for="form-mailinglistusername">Nome:</label> <br/>
<input type="text" name="username"
id="form-mailinglist-username" required />
</p>
</div>
<div>
<p>
<label for="form-mailinglistemail">Email:</label> <br/>
<input type="email" name="email" id="formmailinglist-email" required />
</p>
</div>
</fieldset>
<fieldset>
<legend>Informazioni opzionali</legend>
<div>
Argomenti d'interesse: <br/>
<ul>
<li><label><input type="checkbox"
name="topic" value="tecnologia" checked
/>Tecnologia</label></li>
<li><label><input type="checkbox"
name="topic" value="motori" />Motori</label></li>
<li><label><input type="checkbox"
name="topic" value="viaggi" />Viaggi</label></li>
</ul>
</div>
</fieldset>
<div>
<input type="submit" value="Iscriviti" />
</div>
</form>
</body>
</html>
Scarica

HTML: Form