Grazie x la risposta.
Ho, però, un problema: ho provato ad integrare il tuo controllo su una funzione già esistente, ma il form viene validato senza eseguire il controllo:
codice:
//Validazione form
function validateNumber(fieldObj, customAlert, sep, dec)
{
// Solo numeri interi
if (sep.length != 1) re = new RegExp("^\\s*(\\d+)\\s*$", "");
// Numeri interi e float (separatore decimale definito da 'sep')
else
{
if (dec > 0) re = new RegExp("^\\s*(\\d*\\" + sep + "\\d{" + dec + "})\\s*$", "");
else re = new RegExp("^\\s*(\\d+(\\" + sep + "\\d+)?|\\" + sep + "\\d+)\\s*$", "");
}
var rt = fieldObj.value.match(re);
if (!rt)
{
if (customAlert.length > 0) alert(customAlert);
else alert("Il campo '" + fieldObj.name + "' deve contenere un numero!");
fieldObj.value = "";
fieldObj.focus();
return(false);
}
//INIZIO TUO CODICE DI CONTROLLO
var namePattern = /^BPT_/;
var nameFields = {};
var fields = f.getElementsByTagName('input');
for (var i=0; i<fields.length; i++)
{
if (namePattern.test(fields[i].name))
{
if (fields[i].value in nameFields)
{
alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
return false;
}
nameFields[fields[i].value] = fields[i].name;
}
}
// Reimposta il campo senza eventuali spazi in testa e in coda
fieldObj.value = rt[1];
return(true);
}
// Array con i dati per le validazioni
var validateTypes = new Array(
new Array(validateNumber, "ssn", "PBT_1", "", "", 0,
"Q_1", "", "", 0,
"N_1", "", "", 0
);
function submitIt(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 + ");");
// Se il corrente test non è riuscito, termina abortendo l'invio del FORM
if (!rt) return(false);
}
}
// Tutte le validazioni sono riuscite, abilita l'invio del FORM
return(true);
}
....
<form method="POST" action="vai.asp" onsubmit="return(submitIt(this));">