Originariamente inviato da Mich_
Che complicato!!
Ma quello non lo hai fatto tu, o mi sbaglio?
Si è così... è una funzione ereditata scritta da altri... e mi sono accorto solo stamattina dell'anomalia...

Ho modificato la funzione secondo tue indicazioni, ma il form parte senza controlli; utilizzo IE sono in rete intranet aziendale; a questo punto posto la pagina completa:
codice:
 <html>
<head>

<script language="javascript" type="text/javascript">
<!--
 
function validateEmpty(fieldObj, customAlert)
{
  // Se il campo non è vuoto, ritorna true (ok)
  if (fieldObj.value.length > 0) return(true);
 
  if (customAlert.length > 0) alert(customAlert);
  else alert("Il campo '" + fieldObj.name + "' è obbligatorio !");
 
  fieldObj.focus();
 
  return(false);  // Errore
}
 

function validateNumber(fieldObj, customAlert) {
  alert("oggetto:"+fieldObj.name+"  tipo:"+fieldObj.type+"  mess:"+customAlert);

  if(fieldObj.value.match(/(\d*\.\d{0,2})|\d+/) return true;
  else {
    if(customAlert.length) alert(customAlert);
    else alert("Il campo '" + fieldObj.name + "' deve contenere un numero!");
    fieldObj.value = "";
    fieldObj.focus();
    return false;
  }
}

 
function validateDate(fieldObj)
{
  var re = new RegExp("^([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})$", "");
 
  var dt = fieldObj.value.match(re);
  if (!dt ||                      // formato non valido
      dt[1] < 1 || dt[1] > 31 ||  // giorno non corretto
      dt[2] < 1 || dt[2] > 12 ||  // mese non corretto
      dt[3] < 1980)               // anno non corretto (minore del 1980)
    {
      alert("La Data inserita non è corretta.");
      fieldObj.focus();
      fieldObj.select();
      return(false);
    }
 
  return(true);
}
 


function validateEmail(fieldObj)
{
  var re = new RegExp("^[a-z][a-z0-9]*\\.[a-z][a-z0-9]*@xxxxx\\.it$", "i");
 
  if (!fieldObj.value.match(re))
    {
      alert("L'indirizzo Email inserito non è corretto.\nL'indirizzo email è obbligatorio nella forma \"nome.cognome@xxxxx.it\".");
      fieldObj.focus();
      fieldObj.select();
      return(false);
    }
 
  return(true);
}
 
// Array con i dati per le validazioni
var validateTypes = new Array(
                              new Array(validateEmpty, "s", "NOME_TR", "",
                                                            "C2H2_C2H4_PPM", "",
                                                            "CH4_H2_PPM", "",
                                                            "C2H4_C2H6_PPM", ""
                                                            ),
                              new Array(validateNumber, "ssn", "POTENZA_MVA", "", "", 0,
                                                               "O2_PPM", "", "", 0,
                                                               "N2_PPM", "", "", 0,
                                                               "CO_PPM", "", "", 0,
                                                               "CO2_PPM", "", "", 0,
                                                               "H2_PPM", "", "", 0,
                                                               "CH4_PPM", "", "", 0,
                                                               "C2H6_PPM", "", "", 0,
                                                               "C2H4_PPM", "", "", 0,
                                                               "C2H2_PPM", "", "", 0
                                                               ));
 
function validateForm(frmObj)
{
  for ( var n = 0 ; n < validateTypes.length ; n++ )
    {
      var arr = validateTypes[n];
 
      var parms = arr[1];         // Tipo di parametri da passare alla
                                  // funzione di validazione
 
      var cb = parms.length + 1;  // Numero di parametri supplementari
                                  // da passare alla funzione di validazione
 
      for ( var m = 2 ; m < arr.length ; m += cb )
        {
          var sEval = "var rt = arr[0](frmObj[arr[m]]";
 
          for ( var e = 1 ; e < cb ; e++ )
            {
              switch(parms.substr(e - 1, 1))
                {
                  case "s":  // Il parametro è una stringa
                      sEval += ", '" + arr[m + e] + "'";
                      break;
 
                  case "n":  // Il parametro è un numero (intero o float)
                  case "p":  // Il parametro è uno statement
                      sEval += ", " + arr[m + e];
                      break;
                }
            }
 
          eval(sEval + ");");
          if (!rt) return(false);
        }
    }
 
  // Tutte le validazioni sono riuscite, abilita l'invio del FORM
  return(true);
}
 
function update_field(val1, val2, dst_field)
{
  if (isNaN(val1) || isNaN(val2)) dst_field.value = "";
  else if (val2 == 0.0) dst_field.value = "*Attenzione, divisione per zero*";
  else dst_field.value = val1 / val2;
}
 
function calcola_rapporti()
{
  // Recupero i valori dai campi A, B, C
  var H2_PPM = parseFloat(document.rapporti.H2_PPM.value);
  var CH4_PPM = parseFloat(document.rapporti.CH4_PPM.value);
  var C2H6_PPM = parseFloat(document.rapporti.C2H6_PPM.value);
  var C2H4_PPM = parseFloat(document.rapporti.C2H4_PPM.value);
  var C2H2_PPM = parseFloat(document.rapporti.C2H2_PPM.value);
 
  update_field(C2H2_PPM, C2H4_PPM, document.rapporti.C2H2_C2H4_PPM);
  update_field(CH4_PPM, H2_PPM, document.rapporti.CH4_H2_PPM);
  update_field(C2H4_PPM, C2H6_PPM, document.rapporti.C2H4_C2H6_PPM);
}
 
var timeoutID = null;
 
// flTimeout è true solo se i methods window.setTimeout() e window.clearTimeout()
// sono implementati dalla versione corrente del DOM (browser del cliente)
var flTimeout = (typeof(window.setTimeout) != "undefined" &&
                 typeof(window.clearTimeout) != "undefined");
 
function delayedUpdate()
{
  // Se il tempo di timeout è in corso, resettalo
  if (timeoutID != null) window.clearTimeout(timeoutID);
 
  // Differisci 'calcola_rapporti()' di 400 millisecondi se il method 'window.setTimeout()'
  // è implementato, in caso contrario, invoca 'calcola_rapporti()' direttamente
  if (flTimeout) timeoutID = window.setTimeout("timeoutID = null; calcola_rapporti();", 400);
  else calcola_rapporti();
}
 
//-->
</script>

<body>

<form name="rapporti" method="post" action="insertest.asp" onsubmit="return(validateForm(this));">

  <input type="text" name="NOME_TR" size="20"> NOME_TR


  <input type="text" name="POTENZA_MVA" size="20"> POTENZA_MVA

  <input type="text" name="O2_PPM" size="20" onkeyup="delayedUpdate();"> O2_PPM

  <input type="text" name="N2_PPM" size="20" onkeyup="delayedUpdate();"> N2_PPM

  <input type="text" name="CO_PPM" size="20" onkeyup="delayedUpdate();"> CO_PPM

  <input type="text" name="CO2_PPM" size="20" onkeyup="delayedUpdate();"> CO2_PPM

  <input type="text" name="H2_PPM" size="20" onkeyup="delayedUpdate();"> H2_PPM

  <input type="text" name="CH4_PPM" size="20" onkeyup="delayedUpdate();"> CH4_PPM

  <input type="text" name="C2H6_PPM" size="20" onkeyup="delayedUpdate();"> C2H6_PPM

  <input type="text" name="C2H4_PPM" size="20" onkeyup="delayedUpdate();"> C2H4_PPM

  <input type="text" name="C2H2_PPM" size="20" onkeyup="delayedUpdate();"> C2H2_PPM


  <input type="text" name="C2H2_C2H4_PPM" readonly size="20"> C2H2_C2H4_PPM (C2H2_PPM / C2H4_PPM)

  <input type="text" name="CH4_H2_PPM" readonly size="20"> CH4_H2_PPM (CH4_PPM / H2_PPM)

  <input type="text" name="C2H4_C2H6_PPM" readonly size="20"> C2H4_C2H6_PPM (C2H4_PPM / C2H6_PPM)


 
  <input type="image" src="img/salva_button.gif" width="84" height="16">
</form>
 
</body>
</html>
P.S. = nel form mancano i campi email e data_prelievo che sono richiamati nelle funzioni di controllo, ma che funzionano regolarmente e nulla hanno a che vedere con l'errore presentato dal form.