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>