• Non ci sono risultati.

In… Form… iamoci (validazione delle form)

N/A
N/A
Protected

Academic year: 2021

Condividi "In… Form… iamoci (validazione delle form)"

Copied!
27
0
0

Testo completo

(1)

In… Form… iamoci

(validazione delle form)

(2)

Bruni e Giorgetti 2

Operazioni comuni

• Ormai siete esperti nella gestione degli eventi

• Rivediamo velocemente alcune operazioni di routine

• Da ora in poi immaginiamo di avere

• dei campi con nomi mytext, mytextarea,

mycheckbox, myradio, etc.

(3)

Prendere il valore da un

campo di input di tipo text, password o textarea

valore = document.getElementById(“mytext“).value;

valore =

document.getElementById(“mypassword“).value;

valore =

document.getElementById(“ mytextarea“).value;

//usare parseInt per valori numerici

(4)

Bruni e Giorgetti 4

Controllare se una checkbox è selezionata o meno

if

(document.getElementById(“mycheckbox“).checked){

valore = document.getElementById(“mycheckbox“).value } else {

valore = “”;

}

(5)

Determinare il valore selezionato di un radio

valore = “”;

for (i=0;

i<document.getElementById(“myradio“).length;

i++) {

if (document.getElementById(“myradio“).checked) {

valore = document.getElementById(“myradio“)[i].value;

break;

} }

(6)

Bruni e Giorgetti 6

Determinare il valore o il testo di una opzione in un

campo select singolo

with

(document.getElementById(“myselect“)) { valore = options[selectedIndex].value;

testo = options[selectedIndex].text;

}

(7)

Determinare il valore e il testo delle opzioni in un select multiplo

valore = testo = “”;

with (document.getElementById(“myform“)){

for (i=0;i<myselect.length;i++) {

if (myselect.options[i].selected) {

valore += “-”+myselect.options[i].value;

testo += “-”+ myselect.options[i].text;

} } }

valori = valore.split(“-”);

testi = testo.split(“-”);

(8)

Validazione

(9)

Le form di un tempo

• Prima di JS il vero scopo delle form HTML era di inviare dati al server visto che il

client non era abbastanza “intelligente” da elaborarli da solo

• Stava al server inviare le risposte del caso in base ai dati ricevuti

(10)

Bruni e Giorgetti 10

La validazione

• Adesso è possibile spostare (tutta o in parte) la logica sul client. Come?

– usando JS!

• In particolare la validazione dei dati

dovrebbe essere totalmente a carico del client. Perché?

– Perché è in grado di farlo.

(11)

Come, dove e quando

• come: gestione eventi di JS

• dove: nel documento che contiene la form

• quando:

– costantemente, ad ogni modifica dei campi – prima dell’invio del modulo

– tecniche miste

(12)

Bruni e Giorgetti 12

Verifica costante

• usare l’attributo onchange oppure onblur

– associare una funzione che controlli se i dati sono consistenti

• visualizzare un messaggio di alert in caso contrario

• usare i metodi focus() e select() invocati sull’elemento in esame per costringere l’utente a inserire dati corretti

– controlli tipici: valori compresi in un certo intervallo, stringhe non vuote, indirizzi di email sensati

• usare l’attributo onfocus per la protezione dei dati (es. totali di un ordine)

– appena il campo riceve il focus lo togliamo passandolo ad un altro elemento della form

(13)

Valori in opportuni intervalli I

• usare un campo di input per leggere valori tra 10 e 100 inclusi

<form id=“myform”>

<input type=“text” id=“mytext”

name=“mytext”

size=“3” maxlength=“3”

value=“10”

onblur=“controlla();” />

</form>

(14)

Bruni e Giorgetti 14

Valori in opportuni intervalli II

<script type=“text/javascript”>

<!--

function controlla() { var valore =

parseInt(document.getElementById(“mytext“).value);

if (isNaN(valore) || valore<10 || valore>100) { document.getElementById(“mytext“).focus();

document.getElementById(“mytext“).select();

alert(“Devi darmi un intero da 10 a 100”);

} }

//-->

</script>

(15)

Stringhe non vuote I

• usare un campo di input per leggere nome e cognome

<form id=“myform”>

<input type=“text” name=“mytext”

id=“mytext”

value=“”

onblur=“controlla();” />

</form>

(16)

Bruni e Giorgetti 16

Stringhe non vuote II

<script type=“text/javascript”>

<!--

function controlla() {

var testo= document.getElementById(“mytext“).value;

var ok = false;

for(i=0; i<testo.length; i++) { var lettera = testo.charAt(i);

if (lettera != “ ” && lettera != “\t”) { ok=true; break; }

}

if (!ok) {

document.getElementById(“mytext“).focus();

document.getElementById(“mytext“).select();

alert(“Non puoi lasciare il campo vuoto”);

} }

//-->

</script>

(17)

Email sensate I

• usare un campo di input per leggere un indirizzo email

<form id=“myform”>

<input type=“text” name=“mytext”

id=“mytext”

value=“”

onblur=“controlla();” />

</form>

(18)

Bruni e Giorgetti 18

Email sensate II

<script type=“text/javascript”>

<!--

function controlla() {

var testo= document.getElementById(“mytext“).value;

var ok = true;

if(testo.length<5) { ok=false; } // almeno 5 caratteri var primoAt=testo.indexOf(“@”);

if (primoAt == -1) { ok=false; } // almeno una @ if(testo.lastIndexOf(“@”) > primoAt) {

ok=false; } // una sola @

if (primoAt == 0 || primoAt == testo.length-1) {

ok=false; } // primo e ultimo carattere diversi da @ if(testo.indexOf(“ ”) != -1) {

ok=false; } // niente spazi

(19)

Email sensate III

if(testo.indexOf(“\t”) != -1) {

ok=false; } // niente tabulazioni

if(testo.lastIndexOf(“.”) == testo.length-1) { ok=false; } // ultimo carattere diverso da “.”

if (!ok) {

document.getElementById(“mytext“).focus();

document.getElementById(“mytext“).select();

alert(“Email insana!”);

} }

//-->

</script>

(20)

Bruni e Giorgetti 20

Verifica all’invio

• la verifica costante potrebbe essere fastidiosa per l’utente

– (i campi della form dovrebbero poter essere riempiti gradualmente e in ordine sparso)

• possiamo rimandare i controlli al momento dell’invio

• usare l’attributo onsubmit del pulsante di submit o del tag <FORM> stesso

• associare una funzione che controlli se tutti i dati della form sono consistenti

– visualizzare un messaggio di alert in caso contrario e restituire il valore false (altrimenti la form potrebbe essere inviata

ugualmente)

– se tutto va bene restituire true per essere sicuri di inviare la form

(21)

Verifiche combinate

• controllare i dati principali ad ogni modifica

• eseguire un controllo aggiuntivo di

consistenza prima dell’invio della form

– il controllo aggiuntivo è molto sensato

• il CGI dovrà comunque ricontrollare la consistenza dei dati perché

– qualcuno potrebbe copiare il codice HTML della form, modificarla ed usarla per inviare dati

– l’utente potrebbe disattivare JS

(22)

Bruni e Giorgetti 22

Operazioni comuni

• Ormai siete esperti nella gestione degli eventi e nella validazione…

• Rivediamo velocemente alcune operazioni di routine

• Da ora in poi immaginiamo di avere

• una form con name myform

• dei campi con nomi mytext, mytextarea, mycheckbox, myradio, etc.

(23)

Controllare se una checkbox è selezionata o meno

if (

document.getElementById(“mycheckbox“).checked)

{ alert(document.getElementById(“mycheckbox“).value) }

(24)

Bruni e Giorgetti 24

Determinare il valore selezionato di un radio

for (i=0;i< document.getElementById(“myradio“).length;i++) { if (document.getElementById(“myradio“)[i].checked)

{ alert(document.getElementById(“myradio“)[i].value);

break;

} }

(25)

Determinare il valore o il testo di una opzione in un

campo select singolo

with (document.getElementById(“myselect“)) { alert(options[selectedIndex].value);

alert(options[selectedIndex].text);

}

(26)

Bruni e Giorgetti 26

Determinare il valore o il testo di una opzione in un

campo select multiplo

with (document.getElementById(“myform“)) { for (i=0;i<myselect.length;i++)

{ if (myselect.options[i].selected)

{ alert(myselect.options[i].value);

alert(myselect.options[i].text);

} } }

(27)

Il pulsante di help

• Nelle form bisognerebbe sempre inserire un pulsante “Help”

• se premuto dovrebbe aprire una nuova finestra senza toolbar, menubar, etc..

• nella finestra dovrebbero apparire le istruzioni per riempire il modulo

• se il modulo è molto lungo e complicato potremmo anche inserire un pulsante di help per ogni campo, oppure per ogni “gruppo” di campi

• Ricordarsi di inserire anche un pulsante per chiudere la finestra di Help

Riferimenti

Documenti correlati

5.B Se non è stata erogata la formazione in materia di prevenzione della corruzione, indicare le ragioni della mancata

[dichiarare, per ciascuno dei soggetti (indicandone il nominativo), tutte le condanne risultanti dal casellario giudiziale, comprese quelle per le quali

di essere pienamente consapevole che nel caso venisse accertata dall’ente appaltante la non veridicità delle dichiarazione rese o della sussistenza nei riguardi

I laureati presso il canale di Agrigento, in ragione delle specificità dell'offerta formativa che vi è erogata, acquisiscono la capacità di utilizzare competenze e conoscenze

I dati potranno essere comunicati dal comitato organizzativo (che comunicherà solo i singoli dati necessari al perseguimento di ogni singola finalità indicata in tale

I laureati presso il canale di Agrigento, in ragione delle specificità dell'offerta formativa che vi è erogata, acquisiscono la capacità di utilizzare competenze e conoscenze

q Sì/Yes q No Informazioni obbligatorie sull’utilizzo della piattaforma on line/APP di Poste Italiane (Mandatory details regarding the use of Poste Italiane’s online

Caffèlatte con la pressione di un pulsante Passaggio automatico da latte a schiuma di latte Acqua calda power (3 livelli di temperatura) Funzione Aroma Boost.