In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete...

27
In… Form… iamoci (validazione delle form)

Transcript of In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete...

Page 1: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

In… Form… iamoci(validazione delle

form)

Page 2: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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.

Page 3: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 3

Prendere il valore da un campo di input di tipo

text, password o textareavalore = document.getElementById(“mytext“).value;

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

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

//usare parseInt per valori numerici

Page 4: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 4

Controllare se una checkbox è selezionata o

menoif (document.getElementById(“mycheckbox“).checked){ valore = document.getElementById(“mycheckbox“).value} else { valore = “”;}

Page 5: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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;}

}

Page 6: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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;

}

Page 7: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 7

Determinare il valore e il testo delle opzioni in un select

multiplovalore = 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(“-”);

Page 8: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Validazione

Page 9: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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

Page 10: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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.

Page 11: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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

Page 12: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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

Page 13: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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>

Page 14: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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>

Page 15: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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>

Page 16: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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>

Page 17: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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>

Page 18: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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…

Page 19: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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>

Page 20: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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

Page 21: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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

Page 22: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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.

Page 23: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 23

Controllare se una checkbox è selezionata o

meno

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

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

Page 24: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

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;}

}

Page 25: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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);

}

Page 26: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 26

Determinare il valore o il testo di una opzione in un

campo select multiplowith (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); } }}

Page 27: In… Form… iamoci (validazione delle form). Bruni e Giorgetti2 Operazioni comuni Ormai siete esperti nella gestione degli eventi Rivediamo velocemente.

Bruni e Giorgetti 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