ho scoperto il problema ma non so come risolverlo.
l'onsubmit è scritto così:
onsubmit="return (verificadata() && checkForm(this));"
perchè mi fa la verifica anche della data che sia scritta in modo corretto
ecco lo script:
codice:
<SCRIPT LANGUAGE="JAVASCRIPT">
function numerico(stringain)
// la funzione si basa sull'utilizzo del metodo parseInt
// di cui si riporta di seguito un esempio:
// esempio : ParseInt(11) = 11
// esempio : ParseInt(11ss) = 11
// esempio : ParseInt(aaa) = NaN
// Se il dato in input è un numero avremo lo stesso output da parseInt
// mentre in caso di contenuto alfanumerico avremo NaN oppure la parte
// numerica della stringa. L'esito della funzione sarà true se
// input = output
// per una maggiore precisione nel controllo ho preferito effettuare un
// ciclo in modo da controllare ogni songolo carattere piuttosto che la stringa
// intera
{
var stringaout;
var carattere;
for (i=0;i<stringain.length;i++)
{
carattere=stringain.charAt(i);
if (parseInt(carattere)!=carattere)
return false;
}
return true;
}
function verificadata()
{
var dataverifica;
var dataoutput;
var gginput;
var mminput;
var aaaainput;
var ggoutput;
var mmoutput;
var aaaaoutput;
var datainput=document.getElementById("data").value;
// la prima cosa che si controlla è che la data sia stata effettivamente
// immessa e che sia di 10 caratteri
if (datainput=="")
{
alert ('Immettere una data');
return false;
}
else {
return true;
}
if (datainput.length!=10)
{
alert ('La data deve essere in formato GG/MM/AAAA');
return false;
}
else {
return true;
}
// vengono ricavati il l'anno, il mese ed il giorno dalla data in input
gginput=datainput.substr(0,2);
mminput=datainput.substr(3,2);
aaaainput=datainput.substr(6,4);
// tramite la funzione numerico viene verificato che il giorno, il mese
// e l'anno immessi siano effettivamente in formato numerico
if(!(numerico(gginput)))
{
alert ('Il giorno inserito non è in formato numerico');
return;
}
if(!(numerico(mminput)))
{
alert ('Il mese inserito non è in formato numerico');
return;
}
if(!(numerico(aaaainput)))
{
alert ('L`anno inserito non è in formato numerico');
return;
}
// viene utilizzato un oggetto data per la verifica costruendola in base
// ai parametri ricavati in input (l'anno è sottratto di 1 perchè la funzione data
// considera i mesi partendo da zero)
dataverifica =new Date(aaaainput,mminput-1,gginput)
// dalla data creata viene ricavato l'anno, il mese ed il giorno (il mese è incrementato
// di 1 per restituire il mese nel formato standard)
aaaaoutput=dataverifica.getFullYear().toString();
mmoutput=(dataverifica.getMonth()+1).toString();
ggoutput=dataverifica.getDate().toString();
// poichè le funzioni getMonth e getDate restituiscono valori numerici
// occorre aggiungere lo zero per i mesi e gli anni unitari (es "1/1/2005")
// il controllo è effettuato sulla lunghezza della stringa (se < 2 aggiungi lo zero)
if (mmoutput.length<2)
mmoutput="0"+mmoutput;
if (ggoutput.length<2)
ggoutput="0"+ggoutput;
// La data in output è costituita dai dati ricavati precedentemente separati
// dal carattere "/" dopo aver aggiunto
dataoutput=ggoutput+"/"+mmoutput+"/"+aaaaoutput;
// viene confrontata la data in input con quella in output
// se non coincidono vuol dire che la data non è corretta
if (datainput!=dataoutput) {
alert('La data inserita non è corretta');
return false;
}
else {
return true;
}
}
</SCRIPT>