Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 78 di 112
  • livello avanzato
Indice lezioni

Controlli e valori

Gestire i controlli utente per ricavare i valori dall'interfaccia
Gestire i controlli utente per ricavare i valori dall'interfaccia
Link copiato negli appunti

Nella maggior parte dei casi la gestione di un form tramite JavaScript richiede l'accesso ai suoi controlli e ai valori inseriti dall'utente.

A controlli diversi corrispondono modalità diverse di interazione con l'utente e di gestione dell'input: pensiamo ad esempio alla differenza tra l'inserimento di un valore in una casella di testo e la selezione una voce da un elenco in un menu a discesa, oppure alle scelte da fare spuntando un insieme di checkbox.

Nonostante queste differenze i controlli mantengono sostanzialmente lo stesso approccio per il recupero dei valori in input:attraverso il DOM e con l'accesso alla proprietà value.

La proprietà value di qualsiasi controllo contiene il suo valore corrente indipendentemente dallo specifico tipo di controllo. Per esempio prendiamo una casella di testo descritta in questo modo:

<input name="nome" value="Andrea">

Otteniamo il valore della casella piuttosto semplicemente:

var nome = document.forms.MyForm.nome.value;

Ci sono però dei caso particolari che val la pena esaminare.

Iniziamo considerando un controllo piuttosto interessante: esaminiamo il seguente menu a discesa:

<select name="selProvincia">
	<option value="RM">Roma</option>
	<option value="NA">Napoli</option>
	<option value="TO">Torino</option>
	<option value="MI">Milano</option>
</select>

possiamo ottenere il valore selezionato dall'utente tramite il seguente codice:

var selectedProvincia = document.forms.MyForm.selProvincia.value;

Occorre prestare attenzione alla differenza tra valore del controllo e testo visualizzato. Ad esempio, nel caso dell'elenco delle province abbiamo visualizzato il nome esteso delle città ma abbiamo associato all'attributo value la relativa sigla. Il valore riportato dall'omonima proprietà sarà quindi la sigla della provincia.

Se vogliamo accedere al valore testuale della voce selezionata dobbiamo adottare un approccio diverso:

var selIndex = document.forms.MyForm.selProvincia.selectedIndex;
var selItem; 
if (selIndex > -1) {
	selItem = document.forms.MyForm.selProvincia.options[selIndex];
	console.log(selItem.text);
}

Come possiamo vedere dal codice, abbiamo prima di tutto recuperato l'indice dell'elemento selezionato tramite la proprietà selectedIndex. Nel caso in cui l'utente non ha effettuato alcuna selezione il valore di questa proprietà è -1. In caso contrario possiamo sfruttare il suo valore per individuare l'elemento option all'interno dell'array options del menu a discesa. Il testo della voce selezionata è rappresentato dalla proprietà text della option.

Selezioni multiple

Purtroppo l'utilizzo della proprietà value non è più sufficiente quando il menu a discesa è impostato per consentire la selezione multipla:

<select name="selProvincia" multiple="multiple">
	<option value="RM">Roma</option>
	<option value="NA">Napoli</option>
	<option value="TO">Torino</option>
	<option value="MI">Milano</option>
</select>

In questo caso la proprietà value restituisce il primo elemento selezionato. Per ottenere l'elenco degli elementi selezionati dall'utente occorre eseguire un ciclo analogo a quello mostrato di seguito:

var options = document.forms.MyForm.selProvincia.options;
var selectedOptions = [];
for (var i = 0; i < options.length; i++) {
	if (options[i].selected) selectedOptions.push(options[i].value);
}

In pratica, scorriamo l'elenco delle opzioni associate al controllo alla ricerca di quelle con la proprietà selected impostata a true. Nel nostro esempio abbiamo inserito i valori delle opzioni selezionate in un array selectedOptions.

Radio buttons

Nel caso di controlli di tipo radio button occorre fare alcune osservazioni. Innanzitutto richiamiamo il fatto che un gruppo di elementi di tipo radio button consentono la selezione di un solo elemento del gruppo. Il raggruppamento di valori è determinato dal nome associato ai radio button, quindi se ad esempio in un form vogliamo consentire la selezione del sesso dobbiamo assegnare lo stesso valore all'attributo name di entrambi i radio button:

<label><input type="radio" name="sesso" value="M"/>Maschio</label>
<label><input type="radio" name="sesso" value="F"/>Femmina</label>

In questo caso il riferimento a document.myForm.sesso restituisce un array di due elementi. Tuttavia possiamo stabilire quale dei due elementi è stato selezionato semplicemente accedendo alla proprietà value dell'array:

var sesso = document.forms.MyForm.sesso.value;

La proprietà value dei controlli restituisce il loro valore corrente rappresentandolo come stringa. Pertanto, quando dobbiamo elaborare il valore di un controllo dovremmo convertirlo nel tipo di dato previsto. Ad esempio, se in una casella di testo ci aspettiamo un valore numerico, prima di effettuare dei calcoli su di esso dovremmo prima convertirlo tramite parseInt() o parseFloat().

Possiamo tuttavia ricorrere alle proprietà valueAsNumber o valueAsDate per ottenere il valore del controllo già convertito.

Ti consigliamo anche