Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    javascript data: problemi su firefox

    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;
    }
    }
    }
    }

  2. #2
    nessuno sa come aiutarmi?

  3. #3
    Ok ho risolto tutto! in pratica con firefox il controllo event mi andava a -1 e mi saltava tutto l'if, andando in fondo!

  4. #4
    ...quindi come hai risolto, scusa?

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    3 anni di distanza, codice vetusto in partenza...
    direi che e' il caso di aprire una discussione tua

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.