Newsgroup: it.comp.lang.javascript
Titolo: Validare più campi

Buongiorno a tutti/e,
sono alle prime armi col javascript ed ho il problema di validare una
serie di campi data.
Siccome ho più campi da validare ho scritto una funzione che dovrebbe
validarli tutti in sequenza. Pare semplice, ma siccome non funziona
come mi aspetto, chiedo lumi. La funzione IsData l'ho copiata da questo
gruppo, e ritorna esclusivamente true o false. La funzione che ho
scritto io è questa:
function valida_tutto() {
  val1 = IsData(document.forms.form1.data_ins);
  alert ('proseguo');
  var val2 = IsData(document.forms.form1.prox_app);
  var val3 = IsData(document.forms.form1.data_nasc);
  var val4 = IsData(document.forms.form1.data_disdetta);
  var val5 = val1 && val2 && val3 && val4;
  return (val5);
}
La domanda è:  perché non riesco a "catturare" in val1 il valore
restituito da IsData? L'alert "proseguo" lo vedo soltanto se la prima
riga della funzione ha valore false, altrimenti anche la function
valida_tutto acquista valore true e ritorna. Come faccio a valorizzare
le variabili senza provocare l'uscita dalla funzione?
Aggiungo qui sotto la funzione IsData, in caso sia rilevante per la
domanda:
function IsData(campo,descrizione) {
if (campo == '') {
  return true;
  }
var datePat = /^(.+)\/(.+)\/(.+)$/;
var formvalue = campo.value;
var dateArray = formvalue.match(datePat);
if (dateArray == null) {
   alert("Attenzione! Il formato di "+descrizione+" deve essere
dd/mm/yyyy");
   return false;
  }
var d = dateArray[1];
var m = dateArray[2];
var y = dateArray[3];
var generalPat = /\D/;
if ((d<=0)||(m>12)||(m<0)||(d>31)||(y<0)){
  alert("Attenzione! Data in "+descrizione+" non valida");
  return false;
 }
if ((d<=DaysInMonth(y, m))==false)
 {
  alert("Attenzione! Giorno in "+descrizione+" non valido");
  return false; 
 } 
}
Grazie,
Panathos

 }
Qua ci va a naso un return true; (subito prima della fine della function)
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 Qua ci va a naso un return true; (subito prima della fine della function)
OK, ho inserito return true; poco prima della funzione. Il problema
però è il seguente: nella funzione che valida i campi, ho queste
prime righe:
------------
  val1 = IsData(document.forms.form1.data_ins, "Data Inserimento");
  alert (val1)
  alert ('proseguo')
-----------
l'istruzione alert(val1) viene eseguita SOLTANTO se la funzione IsData
fallisce, cioè non ritorna true. E non capisco perché.

 fallisce, cioè non ritorna true. E non capisco perché.
perché immagino ci sarà un errore nella IsData ... la console firefox cosa
dice?
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 dice?
Uso maxthon, non firefox... cmq non è la isdata() il problema, perché
l'ho sostituita con questa
function IsData(campo,stringa) {
return true;
}
e quindi di sicuro non fallisce... però anche così facendo
l'esecuzione dello script si interrompe qui:
var val1 = IsData(document.forms.form1.data_ins, "Data Inserimento");
->OK
alert ("val1="+val1); ->OK
var val2 = IsData(forms.form1.prox_app, "Data Appuntamento"); ->NISBA
alert ("val2="+val2); -> NISBA
boh.... è tutto il pomeriggio che mi ci sto arrovellando e non capisco
questo comportamento.

 var val2 = IsData(forms.form1.prox_app, "Data Appuntamento"); ->NISBA
dov'è document. ? (la console di firefox sicuramente ti indicherà un errore
qua...)
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 qua...)
Infatti c'era un errore nella funzione IsData (la parte finale che
controlla il giorno, l'ho tolta e rimandata a tempi migliori); ed
inoltre mancava document.
Su IE non è possibile attivare una console javascript? No perché
vista la "sudata" di oggi avere una console di debug potrebbe essere un
buon motivo per installare firefox.
(no, niente guerra di browser, è che con maxthon mi ci trovo benissimo
da anni)
ciao,
Panathos

 buon motivo per installare firefox.
IE fa schifo come debugger
usa firefox, se sviluppi dà tantissime comodità (prova a vedere anche i
vari plug-in, ce ne sono alcuni eccezionali).
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 TP/BP/Delphi/jscr/&c, FAQ items, links.

  }
Grazie, amico, questa direi che mette a posto la questione della data.
Panathos

 vari plug-in, ce ne sono alcuni eccezionali).
Oddio, "sviluppo" è una parola grossa, però è probabile che col
javascript ci abbia sempre più a che fare, quindi... ho appena
installato firefox.
Nel frattempo faccio un'altra domanda: devo validare una listbox, come
mai non funziona document.forms.form1.listbox.value? Mi torna sempre
vuoto, indipendentemente dal fatto che in realtà sia settata una voce
nella listbox.
Grazie,
Panathos

 nella listbox.
dovrebbe andare ... cosa intendi con "listbox"?
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 dovrebbe andare ... cosa intendi con "listbox"?
Una <select>... cmq mi sono accorto che con firefox il valore viene
restituito, sebbene la console restituisca un errore; mentre con IE
ottengo sempre stringa vuota. L'errore è questo:
Errore: [Exception... "'Permesso negato per impostare la proprietà
XULElement.selectedIndex' when calling method:
[nsIAutoCompletePopup::selectedIndex]"  nsresult: "0x8057001e
(NS_ERROR_XPC_JS_THREW_STRING)"  location: "JS frame ::
funzioni.js :: notnull :: line 40"  data: no]
File sorgente: funzioni.js
Riga: 40
E si ricomincia a googlare... :-)
ciao,
Panathos

 E si ricomincia a googlare... :-)
No, quest'errore è di tutt'altra cosa. Probabilmente hai associato un evento
onkey*** a una textbox.
In tal caso, aggiungi al textbox in questione l'attributo "autocomplete" con
valore "off".
Se ne è parlato diffusamente in questo NG, se "googleggi" negli archivi
troverai tutte le informazioni che ti servono.
-- 
~ Io sono il più importante dei miei problemi.

 troverai tutte le informazioni che ti servono.
Sì infatti ho visto ed ho provato a mettere "autocomplete=off", ora
stranamente IE restituisce il valore corretto in
document.forms.form1.campo.value; se lo tolgo restituisce sempre null.
E meno male che ci siete voi, sennò chissà quando ci sarei arrivato.
Grazie,
Panathos