Newsgroup: it.comp.lang.javascript
Titolo: la mamma di tutti i controlli form

vi posto una pagina html con una form e un  js di controllo
vabbe' la mando perche' credo possa essere utile... poi perche' se c'e'
qualcuno che puo' migliorarla... ben venga... e poi ancora... perche', come
notera' chi avra' voglia di guardarsela un po', e' fatta a moduli
componibili.
io ho fatto quello per il controllo di esistenza dei diversi tipi di campi,
quello per la validazione dei campi di testo che contengono indirizzi mail
e quello per la validazioni dei campi di testo che devono contenere solo
dati numerici...  se qualcuno ha voglia di proporre altri moduli... (per
esempio per la P.IVA, codice fiscale, date, ecc.)... ben venga :)
ciao
aldo
----------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/REC-html40/loose.dtd
">
<HTML>
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=iso-8859-1">
<TITLE>controllo Form</TITLE>
<SCRIPT TYPE="text/javascript"><!--
/****************************************************************
FUNCTION CONTROLLAFORM
Script from 
sup...@gruppo4.com
 - 
http://www.gruppo4.com
You can use this code if you leave this message
****************************************************************/
/*questa parte della funzione deve essere scritta nella pagina html e
aggiornata relativamente alla form*/
function getString() {
mustBeList = "myText,textArea,myUpl,Select,checkOne,checkTwo,radioOne"
mustBeNameList = "Testo,Area di Testo,Upload,Select,Primo Check,Secondo
Check,Radiobutton"
validMailList = "myMail"
validMailNameList = "eMail"
onlyIntegerList= "PIva"
onlyIntegerNameList = "Partita IVA"
}
/*da qui in poi la funzione puo' essere scritta in un foglio js*/
function controllaForm(nomeForm,action){
var alrtMsg = "ATTENZIONE!"
var msg1 = "\rIl campo "
var msg2 = "\rI campi "
var mbMsg1 = " non e' stato compilato"
var mbMsg2 = " non sono stati compilati"
var vmMsg1 = " contiene dati non validi"
var vmMsg2 = " contengono dati non validi"
var oiMsg1 = " puo' contenere solo numeri"
var oiMsg2 = " possono contenere solo numeri"
/*definizione delle variabili e richiamo dei loro valori dalla pagina html*/
mustBeList = ""
mustBeNameList = ""
validMailList = ""
validMailNameList = ""
onlyIntegerList= ""
onlyIntegerNameList = ""
getString()
/****************************************************************
MODULO MUST BE
****************************************************************/
if (mustBeList != "") {
/*creazione degli array*/
mustBeArray = mustBeList.split(",");
mustBeNameArray = mustBeNameList.split(",")
tempArray = new Array()
tempNameArray = new Array()
var e = 0
var n = 0
/*loop su tutti i form.elements per popolare il tempArray
(nome esistente, nome unico, contenuti in mustBeList)*/
var tempName = ""
for (i = 0; i < nomeForm.length; i++) {
if
((nomeForm[i].name!="")&&(nomeForm[i].name!=tempName)&&(mustBeList.indexOf(n
omeForm[i].name)!=-1)) {
tempArray[e]=i; e= e+1;
}
var tempName = nomeForm[i].name
}
/*loop su tempArray*/
for (e = 0; e < tempArray.length; e++) {
i=tempArray[e]
/*per ogni elemento si individua la posizione 'j' in mustBeArray e in
mustBeNameArray*/
for (k = 0; k < mustBeArray.length; k++) {
if (mustBeArray[k].indexOf(nomeForm[i].name)!=-1) {j=k}
}
/*se il campo e' vuoto ed e' di tipo testo, password, area di testo, file
upload*/
if((nomeForm[i].value=="")&&((nomeForm[i].type=="text")||(nomeForm[i].type==
"password")||(nomeForm[i].type=="textarea")||(nomeForm[i].type=="file"))) {
tempNameArray[n] = mustBeNameArray[j];n+=1;
}
/*se il campo  e' vuoto ed e' di tipo select*/
if((nomeForm[i].type=="select-one")&&(nomeForm[i].options[nomeForm[i].select
edIndex].value =="")) {
tempNameArray[n] = mustBeNameArray[j];n+=1;
}
/*se il campo e' di tipo checkbox o radiobutton*/
if((nomeForm[i].type=="checkbox")||(nomeForm[i].type=="radio")) {
var checkMyCheck = false
for (c = 0; c < nomeForm[nomeForm[i].name].length; c++) {
if (nomeForm[nomeForm[i].name][c].checked=="1"){checkMyCheck = true}
}
if (checkMyCheck == false){tempNameArray[n] = mustBeNameArray[j];n+=1;}
}
}
/*se il loop del modulo mustBe ha trovato errori*/
if (tempNameArray.length!=0){
if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") +
mbMsg1);}
else {alrtMsg += (msg2 + tempNameArray.join(", ") + mbMsg2);}
}
}
/****************************************************************
MODULO VALIDMAIL
****************************************************************/
if (validMailList != "") {
/*creazione degli array*/
validMailArray = validMailList.split(",");
validMailNameArray = validMailNameList.split(",")
tempArray = new Array()
tempNameArray = new Array()
var e = 0
var n = 0
/*loop su tutti i form.elements per popolare il tempArray
(nome esistente, non vuoto, contenuto in validMailList)*/
for (i = 0; i < nomeForm.length; i++) {
if
((nomeForm[i].name!="")&&(nomeForm[i].value!="")&&(validMailList.indexOf(nom
eForm[i].name)!=-1)) {
tempArray[e]=i; e= e+1;
}
}
/*loop su tempArray*/
for (e = 0; e < tempArray.length; e++) {
i=tempArray[e]
/*per ogni elemento si individua la posizione 'j' in validMailArray e in
validMailNameArray*/
for (k = 0; k < validMailArray.length; k++) {
if (validMailArray[k].indexOf(nomeForm[i].name)!=-1) {j=k}
}
/*il campo deve contenere solo caratteri validi*/
var validate = true
var badChars = " /:,;"
for (c=0; c<badChars.length; c++) {
badChar = badChars.charAt(c)
if (nomeForm[i].value.indexOf(badChar,0) > -1) {validate = false}
}
/*deve contenere una e una sola @*/
atPos = nomeForm[i].value.indexOf("@",1)
if (atPos == -1) {validate = false}
if (nomeForm[i].value.indexOf("@",atPos+1) != -1) {validate = false}
/*dopo la @ un solo "." e almeno due caratteri*/
dotPos = nomeForm[i].value.indexOf(".",atPos)
if (dotPos == -1) {validate = false}
if (dotPos+3 > nomeForm[i].value.length) {validate = false}
if (validate==false){tempNameArray[n] = validMailNameArray[j];n+=1;}
}
/*se il loop del validMail be ha trovato errori*/
if (tempNameArray.length!=0){
if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") +
vmMsg1);}
else {alrtMsg += (msg2 + tempNameArray.join(", ") + vmMsg2);}
}
}
/****************************************************************
MODULO ONLY INTEGER
****************************************************************/
if (onlyIntegerList != "") {
/*creazione degli array*/
onlyIntegerArray = onlyIntegerList.split(",");
onlyIntegerNameArray = onlyIntegerNameList.split(",")
tempArray = new Array()
tempNameArray = new Array()
var e = 0
var n = 0
/*loop su tutti i form.elements per popolare il tempArray
(nome esistente, non vuoto, contenuto in onlyIntegerList)*/
for (i = 0; i < nomeForm.length; i++) {
if
((nomeForm[i].name!="")&&(nomeForm[i].value!="")&&(onlyIntegerList.indexOf(n
omeForm[i].name)!=-1)) {
tempArray[e]=i; e= e+1;
}
}
/*loop su tempArray*/
for (e = 0; e < tempArray.length; e++) {
i=tempArray[e]
/*per ogni elemento si individua la posizione 'j' in onlyIntegerArray e in
onlyIntegerNameArray*/
for (k = 0; k < onlyIntegerArray.length; k++) {
if (onlyIntegerArray[k].indexOf(nomeForm[i].name)!=-1) {j=k}
}
/*se il campo non contiene solo numeri interi*/
if(isNaN(nomeForm[i].value)) {
tempNameArray[n] = onlyIntegerNameArray[j];n+=1;
}
}
/*se il loop del modulo onlyInteger ha trovato errori*/
if (tempNameArray.length!=0){
if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") +
oiMsg1);}
else {alrtMsg += (msg2 + tempNameArray.join(", ") + oiMsg2);}
}
}
/*se ci sono errori mostra l'alert, altrimenti andiamo all'URL definito
nella chiamata*/
if (alrtMsg!="ATTENZIONE!") {alert (alrtMsg)}
else {window.location.href=action}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<!-- form -->
<DIV ALIGN="center">
<FORM METHOD="post" NAME="myForm">
<TABLE CELLPADDING="4" CELLSPACING="0" BORDER="2">
<TR>
<TH>MY FORM</TH>
</TR>
<TR>
<TD>TESTO&nbsp;
<INPUT TYPE="text" NAME="myText" SIZE="30">
</TD>
</TR>
<TR>
<TD>MAIL&nbsp;
<INPUT TYPE="text" NAME="myMail" SIZE="30">
</TD>
</TR>
<TR>
<TD>PARTITA IVA&nbsp;
<INPUT TYPE="text" NAME="PIva" SIZE="30">
</TD>
</TR>
<TR>
<TD>UPLOAD&nbsp;
<INPUT TYPE="file" NAME="myUpl" SIZE="20">
</TD>
</TR>
<TR>
<TD>AREA DI TESTO<BR>
<TEXTAREA NAME="textArea" COLS="37" ROWS="3" WRAP="phisical"></TEXTAREA>
</TD>
</TR>
 <TR>
<TD>SELECT:&nbsp;
<SELECT NAME="Select" SIZE="1">
<OPTION VALUE="">VOID
<OPTION VALUE="01">01
<OPTION VALUE="02">02
</SELECT>
</TD>
</TR>
<TR>
<TD>PRIMO CHECK:&nbsp;
<INPUT TYPE="CheckBox" NAME="checkOne" VALUE="01">check 01&nbsp;
<INPUT TYPE="CheckBox" NAME="checkOne" VALUE="02">check 02
</TD>
</TR>
<TR>
<TD>SECONDO CHECK:&nbsp;
<INPUT TYPE="CheckBox" NAME="checkTwo" VALUE="A">check A&nbsp;
<INPUT TYPE="CheckBox" NAME="checkTwo" VALUE="B">check B
</TD>
</TR>
<TR>
<TD>RADIOBUTTON:&nbsp;
<INPUT TYPE="Radio" NAME="radioOne" VALUE="X">radio X&nbsp;
<INPUT TYPE="Radio" NAME="radioOne" VALUE="Y">radio Y
</TD>
</TR>
<TR>
<TH>
<INPUT TYPE="Reset" VALUE="Reset">
<INPUT TYPE="Submit" VALUE="ADVcontrol"
ONCLICK="controllaForm(document.myForm,'javascript:document.myForm.submit()'
)">
</TH>
</TR>
</TABLE>
</FORM>
</DIV>
</BODY>
</HTML>
--
Posted from 
DNS.GRUPPO4.COM
 [193.70.107.66] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao,
è "didatticamente" una buona idea la tua
....quella di mettere funzioni a parte per i
vari check e se mi dai il permesso la vorrei pubblicare indicando
l'autore ed un link a dove vuoi..
poi se vuoi aggiungo la funzione per il controllo della carta di credito
e metto la versione "integrale" per il controllo mail, nonché provo
a migliorare alcune funzioni..
inoltre metterei anche la possibilità di definire campi obbligati
e fare un controllo più rigido su quelli..
--
Bye
        Ro<*¿*>berto

ma certo che ti do il permesso, autore e link sono sempre quelli:
sup...@gruppo4.com
 - 
http://www.gruppo4.com
.
per quanto riguarda miglioramenti e aggiornamenti... era proprio quello che
intendevo inviando il tutto.
ciao
aldo
  ------------------------------------------------------------------------
   Ciao,

   --
   Bye
           Ro<*¿*>berto
     ------------------------------------------------------------------------


Ci ho guardato meglio oggi,
mi sa che devo cambiare
molti script :(
