Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Controllo Data

  1. #1

    Controllo Data

    Uso tale script da me così modificato, per controllare il campo CampoData del form form2

    <SCRIPT LANGUAGE="JavaScript">
    function ControlloData(f) {
    if (document.form2.CampoData.value.substring(2,3) != "/" ||
    document.form2.CampoData.value.substring(5,6) != "/" ||
    isNaN(document.form2.CampoData.value.substring(0,2 )) ||
    isNaN(document.form2.CampoData.value.substring(3,5 )) ||
    isNaN(document.form2.CampoData.value.substring(6,1 0))) {
    alert("Inserire data in formato gg/mm/aaaa");
    document.form2.CampoData.value = "";
    //* document.form2.CampoData.focus();
    return false;
    } else if (document.form2.CampoData.value.substring(0,2) > 31) {
    alert("Impossibile utilizzare un valore superiore a 31 per i giorni");
    //* document.form2.CampoData.select();
    return false;
    } else if (document.form2.CampoData.value.substring(3,5) > 12) {
    alert("Impossibile utilizzare un valore superiore a 12 per i mesi");
    document.form2.CampoData.value = "";
    //* document.form2.CampoData.focus();
    return false;
    } else if (document.form2.CampoData.value.substring(6,10) < 1900) {
    alert("Impossibile utilizzare un valore inferiore a 1900 per l'anno");
    document.form2.CampoData.value = "";
    //* document.form2.nascCampoDataita.focus();
    return false;
    }
    }
    </script>

    Tale controllo avviene sull'evento onblur della casella di testo Data.

    Tutto ok finche il form è:

    <form name="form2" method="post" action="">
    <input type="text" name="CampoData" onBlur="ControlloData(this);">
    </form>

    Come generalizzo lo script per controllare eventuali altri campi che hanno nomi diversi?

    <input type="text" name="CampoData2" onBlur="ControlloData(this);">
    <input type="text" name="CampoData3" onBlur="ControlloData(this);">
    <input type="text" name="CampoData4" onBlur="ControlloData(this);">

    Come se dovessi inserire varie date? :master:
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Guarda chi si rivede!

    Codice PHP:
    <html>
    <
    head>
    <
    SCRIPT LANGUAGE="JavaScript">
    function 
    controlloData(inputData)
    {
        if (
    inputData.value.substring(2,3) != "/" ||
                    
    inputData.value.substring(5,6) != "/" ||
                    
    isNaN(inputData.value.substring(0,2)) ||
                    
    isNaN(inputData.value.substring(3,5)) ||
                    
    isNaN(inputData.value.substring(6,10))) {
            
    alert(inputData.name ": Inserire data in formato gg/mm/aaaa");
            
    inputData.value "";
            
    //* inputData.focus();
            
    return false;
        }
        else if (
    inputData.value.substring(0,2) > 31) {
            
    alert(inputData.name ": Impossibile utilizzare un valore superiore a 31 per i giorni");
            
    //* inputData.select();
            
    return false;
        }
        else if (
    inputData.value.substring(3,5) > 12) {
            
    alert(inputData.name ": Impossibile utilizzare un valore superiore a 12 per i mesi");
            
    inputData.value "";
            
    //* inputData.focus();
            
    return false;
        }
        else if (
    inputData.value.substring(6,10) < 1900) {
            
    alert(inputData.name ": Impossibile utilizzare un valore inferiore a 1900 per l'anno");
            
    inputData.value "";
            
    //* document.form2.nascCampoDataita.focus();
            
    return false;
        }
    }
    </script>
    </head>
    <body>

    Tale controllo avviene sull'evento onblur della casella di testo Data.

    Tutto ok finche il form è:

    <form name="form2" method="post" action="">
    <input type="text" name="CampoData" onBlur="controlloData(this);">
    <input type="text" name="CampoData2" onBlur="controlloData(this);">
    <input type="text" name="CampoData3" onBlur="controlloData(this);">
    <input type="text" name="CampoData4" onBlur="controlloData(this);">
    </form>

    Come generalizzo lo script per controllare eventuali altri campi che hanno nomi diversi?


    </body>
    </html> 
    Allora, ho sostituito f con inputData perchè f non significa nulla. Cerca sempre di dare alle tue variabili (e ancor di più ai parametri delle tue funzioni) un nome autoesplicativo.

    Poi, ho rinominato la funzione controllaData invece di ControllaData perché mi piace rispettare una convenzione java che vuole che i nomi di campi e funzioni inizino per lettera minuscola. Le lettere iniziali maiuscole sarebbe bellino riservarle agli oggetti. Non è che javascript sia java, però un po' ci assomiglia.

    Ultima, e cosa più importante, se passi un parametro a una funzione cerca di usarlo!

    Ah, no, aspetta.. per favore.. indenta il codice e usa i tag...

    Altro... no per stasera basta! Sciopero! Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    posso consigliare un'altro modo?

    Codice PHP:
    var regExprData = /^([1-9]|0[1-9]|[12][0-9]|3[01])[- \/.]([1-9]|0[1-9]|1[012])[- \/.]((|19|20)\d\d)$/;
    function 
    ControlloData(f){
       var 
    dataStr f.value;
       return 
    regExprData.test(dataStr);

    Dovrebbe andare se fai

    <input type="text" name="CampoData2" onBlur="ControlloData(this);">
    <input type="text" name="CampoData3" onBlur="ControlloData(this);">
    <input type="text" name="CampoData4" onBlur="ControlloData(this);">

    Ritorna true in caso le date siano:

    dd/mm/yyyy
    dd/mm/yy
    d/m/yyyy
    d/m/yy
    dd/m/yyyy
    d/mm/yyyy
    dd/m/yy
    d/mm/yy

    E tutte le corrispondenti con - al posto di /

  4. #4
    bè faccio delle prove in entrambi i casi poichè non mi dispiace ... anche ... imparare!!!
    Prima o poi anch'io vi insegnerò qualcosa

  5. #5
    Ok, primo caso funzionante e ti sono grato anche perla tempestività,

    per quanto riguarda il secondo invece ho un pò più di problemi, ho provato a fare

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <SCRIPT LANGUAGE="JavaScript">
    var regExprData = /^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.]([1-9]|0[1-9]|1[012])[- /.]((|19|20)dd)$/;
    function controlloData(inputValue){
    var dataStr = inputValue.value;
    return regExprData.test(dataStr);
    }
    </script>
    </head>

    <body>
    <input type="text" name="CampoData2" onBlur="controlloData(this);">
    <input type="text" name="CampoData3" onBlur="controlloData(this);">
    <input type="text" name="CampoData4" onBlur="controlloData(this);">
    </body>
    </html>
    ma non mi funziona.Dove sbaglio?
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    sono questi cavolo di tag BBCode del forum, che tolgono gli escape, la reg expr corretta è:

    var regExprData = /^([1-9]|0[1-9]|[12][0-9]|3[01])[- \/.]([1-9]|0[1-9]|1[012])[- \/.]((|19|20)dd)$/;

  7. #7
    Per la cronaca ho fatto un copia incolla dell'espressione di artorius e non mi funge ugualmente, ho sbagliato altro?

    In ogni caso, tornando allo script di Pastore12:

    sò che non è il modo più ortodosso per farlo, ma anche per far vedere la mia buona volontà, avendo necessita che il valore della data tornasse quello iniziale se l'inserimento non è corretto, ho così modificato lo script e il form.

    Sò che in questo modo lo script da inserire non è più come richiesto, generico, non è il solito per esempio se il numero delle date è diverso da due, ma non sapevo prioprio come fare (forse, anzi probabilmente, c'è proprio un'istruzione dedicata).

    Se per qualcuno può servire ho fatto così:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <SCRIPT LANGUAGE="JavaScript">
    function controlloData(inputData) {
    if (inputData.value.substring(2,3) != "/" ||
    inputData.value.substring(5,6) != "/" ||
    isNaN(inputData.value.substring(0,2)) ||
    isNaN(inputData.value.substring(3,5)) ||
    isNaN(inputData.value.substring(6,10))) {
    alert(inputData.name + ": Inserire data in formato gg/mm/aaaa");
    if (inputData.name == "CampoData1") {
    inputData.value = document.form1.appoggio1.value;
    } else if (inputData.name == "CampoData2") {
    inputData.value = document.form1.appoggio2.value;
    }
    return false;
    } else if (inputData.value.substring(0,2) > 31) {
    alert(inputData.name + ": Impossibile utilizzare un valore superiore a 31 per i giorni");
    if (inputData.name == "CampoData1") {
    inputData.value = document.form1.appoggio1.value;
    } else if (inputData.name == "CampoData2") {
    inputData.value = document.form1.appoggio2.value;
    }
    return false;
    } else if (inputData.value.substring(3,5) > 12) {
    alert(inputData.name + ": Impossibile utilizzare un valore superiore a 12 per i mesi");
    if (inputData.name == "CampoData1") {
    inputData.value = document.form1.appoggio1.value;
    } else if (inputData.name == "CampoData2") {
    inputData.value = document.form1.appoggio2.value;
    }
    return false;
    } else if (inputData.value.substring(6,10) < 1900) {
    alert(inputData.name + ": Impossibile utilizzare un valore inferiore a 1900 per l'anno");
    if (inputData.name == "CampoData1") {
    inputData.value = document.form1.appoggio1.value;
    } else if (inputData.name == "CampoData2") {
    inputData.value = document.form1.appoggio2.value;
    }
    return false;
    }
    document.form1.appoggio.value = "";
    }
    function copia(inputData) {
    if (inputData.name == "CampoData1") {
    document.form1.appoggio1.value = inputData.value;
    } else if (inputData.name == "CampoData2") {
    document.form1.appoggio2.value = inputData.value;
    }
    }
    </script>
    </head>
    <body>
    <form name="form1" method="post" action="">
    <table width="300" border="1" align="center">
    <tr>
    <td width="150">Data 1:</td>
    <td width="150">
    <input type="text" name="appoggio1" style="display:none;">
    <input type="text" name="CampoData1" value="01/01/2001" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    <tr>
    <td width="150">Data 2:</td>
    <td width="150">
    <input type="text" name="appoggio2" style="display:none;">
    <input type="text" name="CampoData2" value="02/02/2002" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    Prima o poi anch'io vi insegnerò qualcosa

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Beh.. visto che abbiam voglia di imparare..

    come ti sei inventato i <input type="text" .. style="display: none"> ?

    io ho sempre usato i campi hidden: <input type="hidden" ... >

    e poi ti do una dritta, visto che subtring già lo conosci.. potresti anche usare la funzione indexOf, no?

    Immagina che i nomi del campo data siano campoData_1, campoData_2 eccetera eccetera

    f.name.indexOf("_") (vado a memoria..) dovrebbe restituire la posizione del carattere "_" nel nome dell'input

    quindi con il metodo substring (f.indexOf("_")) o forse substring (f.indexOf("_")+1)
    dovresti ottenere tutta la parte del name a desra di "_"

    Supponiamo anche che i nomi dei campi di appoggio siano campoAppoggio_1, campoAppoggio_2, eccetera

    "campoAppoggio_"+ il risultato del calcolo precedente ti da dinamincamente il nome del campo che ti serve...
    poi fai document.getElementByName(nomeCalcolatoDinamicamen te) e ottieni il tuo input.

    Ora.. non so se getElementByName funzioni sempre, di sicuro funziona sempre
    document.getElementById(idElemento) però devi assegnare il valore corretto agli id dei campi hidden.. id="campoData_1" eccetera...

    Le regular expression.. mi informerò più avanti..
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    @Pastore12
    la Reg Expr funziona, non l'avrei postata senza provarla.

    @riccardo1975
    Il tuo codice ha il seguente problema:

    nel JS scrivi:

    document.form1.appoggio.value = "";

    ma il campo si chiama appoggio1 non appoggio

    Per il resto funziona.

    Le reg Expre semplicemente VALIDA la data ritornando true o false, non fa nulla di particolare, devi intercettare il risultato della chiamata di regExprData.test(dataStr); e agire con quel boolean (tipo se è false fai un alert("Non è una data corretta")).

  10. #10
    Penso proprio di aver risolto in questo modo:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <SCRIPT LANGUAGE="JavaScript">
    function controlloData(inputData) {
    var appoggio = "appoggio_"+((document.getElementById(inputData.na me).id).substring((document.getElementById(inputDa ta.name).id).indexOf("_")+1));
    if (inputData.value.substring(2,3) != "/" ||
    inputData.value.substring(5,6) != "/" ||
    isNaN(inputData.value.substring(0,2)) ||
    isNaN(inputData.value.substring(3,5)) ||
    isNaN(inputData.value.substring(6,10))) {
    alert(inputData.name + ": Inserire data in formato gg/mm/aaaa ");
    inputData.value = document.getElementById(appoggio).value;
    return false;
    } else if (inputData.value.substring(0,2) > 31) {
    alert(inputData.name + ": Impossibile utilizzare un valore superiore a 31 per i giorni");
    inputData.value = document.getElementById(appoggio).value;
    return false;
    } else if (inputData.value.substring(3,5) > 12) {
    alert(inputData.name + ": Impossibile utilizzare un valore superiore a 12 per i mesi");
    inputData.value = document.getElementById(appoggio).value;
    return false;
    } else if (inputData.value.substring(6,10) < 1900) {
    alert(inputData.name + ": Impossibile utilizzare un valore inferiore a 1900 per l'anno");
    inputData.value = document.getElementById(appoggio).value;
    return false;
    }
    }
    function copia(inputData) {
    var appoggio = "appoggio_"+((document.getElementById(inputData.na me).id).substring((document.getElementById(inputDa ta.name).id).indexOf("_")+1));
    document.getElementById(appoggio).value = inputData.value;
    }
    </script>
    </head>
    <body>
    <form name="form1" method="post" action="">
    <table width="300" border="1" align="center">
    <tr>
    <td width="150">Data 1:</td>
    <td width="150">
    <input type="hidden" name="appoggio_1">
    <input type="text" name="Data 1" id="campoData_1" value="01/01/2001" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    <tr>
    <td width="150">Data 2:</td>
    <td width="150">
    <input type="hidden" name="appoggio_2">
    <input type="text" name="Data 2" id="campoData_2" value="02/02/2002" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    <tr>
    <td width="150">Data 3:</td>
    <td width="150">
    <input type="hidden" name="appoggio_3">
    <input type="text" name="Data 3" id="campoData_3" value="03/03/2003" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    <tr>
    <td width="150">Data 4:</td>
    <td width="150">
    <input type="hidden" name="appoggio_4">
    <input type="text" name="Data 4" id="campoData_4" value="04/04/2004" onBlur="controlloData(this);" onFocus="copia(this);" maxlength="10">
    </td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    Mo riprovo la soluzione di astorius!!!!
    Prima o poi anch'io vi insegnerò qualcosa

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.