ciao a tutti! In una pagina html utilizzo questa funzione javascript per gestire l'inserimento in un campo di una data. Funziona bene se non fosse che, utilizzando firefox, una volta che si lascia il campo data, magari utilizzando il tasto TAB o spostandoci su un altro campo, la data inserita perde l'ultimo carattere: ad esempio se inserisco 08/10/2007 e poi mi sposto su un altro campo la data diventa 08/10/200, quindi si cancella l'ultima cifra. Qualcuno sa come aiutarmi? Ah, su internet explorer funziona tutto a meraviglia! Grazie mille!

<SCRIPT LANGUAGE="JavaScript">

// Check browser version
var isNav4 = false, isNav5 = false, isIE4 = false
var strSeperator = "/";
// If you are using any Java validation on the back side you will want to use the / because
// Java date validations do not recognize the dash as a valid date separator.
var vDateType = 3;
// 1 = mm/dd/yyyy
// 2 = yyyy/dd/mm (Unable to do date check at this time)
// 3 = dd/mm/yyyy
var vYearType = 4; // Set to 2 or 4 for number of digits in the year for Netscape
var vYearLength = 4; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
var err = 0; // Set the error code to a default of zero
if ( navigator.appName == "Netscape" )
{
if (navigator.appVersion < "5")
{
isNav4 = true;
isNav5 = false;
}
else if ( navigator.appVersion > "4")
{
isNav4 = false;
isNav5 = true;
}
}
else
{
isIE4 = true;
}

function DateFormat(vDateName, vDateValue, e, dateCheck, dateType, controllo)
{
if (vDateValue.length == 10 && controllo == "si" )
{
var mYear = vDateName.value.substr(6,4);
}

vDateType = dateType;
if (vDateValue == "~")
{
alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
vDateName.value = "";
vDateName.focus();
return true;
}
var whichCode = (window.Event) ? e.which : e.keyCode;
if (vDateValue.length > 8 && isNav4)
{
if ((vDateValue.indexOf("-") >= 1) || (vDateValue.indexOf("/") >= 1))
return true;
}
var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX YZ/-";
if (alphaCheck.indexOf(vDateValue) >= 1)
{
if (isNav4)
{
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
else
{
vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
return false;
}
}
if (whichCode == 8)
return false;
else
{
var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,9 8,99,100,101,102,103,104,105';
if (strCheck.indexOf(whichCode) != -1)
{
if (isNav4)
{
if (((vDateValue.length < 6 && dateCheck) || (vDateValue.length == 7 && dateCheck)) && (vDateValue.length >=1))
{
alert("Data errata\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
if (vDateValue.length == 6 && dateCheck)
{
var mDay = vDateName.value.substr(2,2);
var mMonth = vDateName.value.substr(0,2);
var mYear = vDateName.value.substr(4,4)
if (mYear.length == 2 && vYearType == 4)
{
var mToday = new Date();
var checkYear = mToday.getFullYear() + 30;
var mCheckYear = '20' + mYear;
if (mCheckYear >= checkYear)
mYear = '19' + mYear;
else
mYear = '20' + mYear;
}
var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
if (!dateValid(vDateValueCheck))
{
alert("Data errata\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
return true;
}
else
{
if (vDateValue.length >= 8 && dateCheck)
{
if (vDateType == 1) // mmddyyyy
{
var mDay = vDateName.value.substr(2,2);
var mMonth = vDateName.value.substr(0,2);
var mYear = vDateName.value.substr(4,4)
vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
}
if (vDateType == 2) // yyyymmdd
{
var mYear = vDateName.value.substr(0,4)
var mMonth = vDateName.value.substr(4,2);
var mDay = vDateName.value.substr(6,2);
vDateName.value = mYear+strSeperator+mMonth+strSeperator+mDay;
}
if (vDateType == 3) // ddmmyyyy
{
var mMonth = vDateName.value.substr(2,2);
var mDay = vDateName.value.substr(0,2);
var mYear = vDateName.value.substr(4,4)
vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
}
var vDateTypeTemp = vDateType;
vDateType = 1;
var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
if (!dateValid(vDateValueCheck))
{
alert("Data errata\nReimmettere il dato.");
vDateType = vDateTypeTemp;
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
vDateType = vDateTypeTemp;
return true;
}
else
{
if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1))
{
alert("Data errata\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
}
}
}
else
{
// Non isNav Check
if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1))
{
alert("Data errata\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
return true;
}
// Reformat date to format that can be validated. mm/dd/yyyy
if (vDateValue.length >= 8 && dateCheck)
{
// Additional date formats can be entered here and parsed out to
// a valid date format that the validation routine will recognize.
if (vDateType == 1) // mm/dd/yyyy
{
var mMonth = vDateName.value.substr(0,2);
var mDay = vDateName.value.substr(3,2);
var mYear = vDateName.value.substr(6,4)
}
if (vDateType == 2) // yyyy/mm/dd
{
var mYear = vDateName.value.substr(0,4)
var mMonth = vDateName.value.substr(5,2);
var mDay = vDateName.value.substr(8,2);
}
if (vDateType == 3) // dd/mm/yyyy
{
var mDay = vDateName.value.substr(0,2);
var mMonth = vDateName.value.substr(3,2);
var mYear = vDateName.value.substr(6,4)
}
if (vYearLength == 4)
{
if (mYear.length < 4)
{
alert("Data errata\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
return true;
}
}

var oggi = new Date();
var giorno = oggi.getDate();
var mese = oggi.getMonth() + 1;
var anno = oggi.getYear();
var mDay = vDateName.value.substr(0,2);
var mMonth = vDateName.value.substr(3,2);
var mYear = vDateName.value.substr(6,4)

if (mYear > anno)
{
alert("Data superiore alla data odierna\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
return true;
}
if (mYear == anno && mMonth > mese)
{
alert("Data superiore alla data odierna\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
return true;
}
if (mYear == anno && mMonth == mese && mDay > giorno)
{
alert("Data superiore alla data odierna\nReimmettere il dato.");
vDateName.value = "";
vDateName.focus();
return true;
}

// Create temp. variable for storing the current vDateType
var vDateTypeTemp = vDateType;
// Change vDateType to a 1 for standard date format for validation
// Type will be changed back when validation is completed.
vDateType = 1;
// Store reformatted date to new variable for validation.
var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
if (mYear.length == 2 && vYearType == 4 && dateCheck)
{
//Turn a two digit year into a 4 digit year
var mToday = new Date();
//If the year is greater than 30 years from now use 19, otherwise use 20
var checkYear = mToday.getFullYear() + 30;
var mCheckYear = '20' + mYear;
if (mCheckYear >= checkYear)
mYear = '19' + mYear;
else
mYear = '20' + mYear;
vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
// Store the new value back to the field. This function will
// not work with date type of 2 since the year is entered first.
if (vDateTypeTemp == 1) // mm/dd/yyyy
vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
if (vDateTypeTemp == 3) // dd/mm/yyyy
vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
}
if (!dateValid(vDateValueCheck))
{
alert("Data errata\nReimmettere il dato.");
vDateType = vDateTypeTemp;
vDateName.value = "";
vDateName.focus();
return true;
}
vDateType = vDateTypeTemp;
return true;
}
else
{
if (vDateType == 1)
{
if (vDateValue.length == 2)
{
vDateName.value = vDateValue+strSeperator;
}
if (vDateValue.length == 5)
{
vDateName.value = vDateValue+strSeperator;
}
}
if (vDateType == 2)
{
if (vDateValue.length == 4)
{
vDateName.value = vDateValue+strSeperator;
}
if (vDateValue.length == 7)
{
vDateName.value = vDateValue+strSeperator;
}
}
if (vDateType == 3)
{
if (vDateValue.length == 2)
{
vDateName.value = vDateValue+strSeperator;
}
if (vDateValue.length == 5)
{
vDateName.value = vDateValue+strSeperator;
}
}
return true;
}
}
if (vDateValue.length == 10&& dateCheck)
{
if (!dateValid(vDateName))
{
// Un-comment the next line of code for debugging the dateValid() function error messages
//alert(err);
alert("Data errata\nReimmettere il dato.");
vDateName.focus();
vDateName.select();
}
}
return false;
}
else
{
// If the value is not in the string return the string minus the last
// key entered.
if (isNav4)
{
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
else
{
vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
return false;
}
}
}
}