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

    Validazione data onblur

    Ho uno script che mi controlla onblur che un certo campo contenga una data in formato gg/mm/aaaa oppure nessun valore:

    function controllo_data_o_niente(variabile) {
    var v=document.getElementById(variabile);
    var validDate=false;
    if(v.value.match(/\d{2}\/\d{2}\/\d{4}/)){
    var arrDate=v.value.split('/');
    var date=new Date(arrDate[2],arrDate[1]-1,arrDate[0]);
    if (date.getDate()==arrDate[0] && date.getMonth()==arrDate[1]-1 && date.getFullYear()==arrDate[2]){
    validDate=true;
    }
    }
    if(v.value.length==0) {
    return true;
    } else {
    if (!validDate){
    alert("La data inserita non è corretta. Il formato giusto è \"gg/mm/aaaa\"");
    v.select();
    v.focus();
    return false;
    }
    }
    }

    Ho fatto varie prove ma non riesco a modificare tale script in modo che permetta le date solo nel formato gg/mm/aa.

    Qualcuno può aiutarmi?
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    la parte di codice che hai postato e' di per se' corretta, dal punto di vista formale e logico

    probabilmente il problema e' altrove, per esempio parli di controllo onblur ma ritorni vero o falso,
    a chi? quale risultato ti aspetti?

  3. #3
    Questo è il campo sul quale effettuo il controllo ed esattamente con i sottoscritti comandi:

    <input type='text' class='textbox' name='data' value='' maxlength='10' onkeypress='return carattere_inserito_solo_date(this, event);' onBlur='return controllo_data_o_niente(this.name);'/>

    il sopracitato script funziona correttamente e mi dà errore laddove non fosse realmente una data o non fosse nel fromato gg/mm/aaaa (è consentito, e mi stà bene così, anche un valore non inserito).

    Vorrei ottenere il solito risultato ma nel formato gg/mm/aa.

    Date le mie scarse conoscenze avevo fatto delle prove sostituendo

    if(v.value.match(/\d{2}\/\d{2}\/\d{4}/)){

    con

    if(v.value.match(/\d{2}\/\d{2}\/\d{2}/)){

    immaginando comunque che non fosse sufficiente ai fini del corretto funzionamento.

    Non ho attualmente le conoscenze per fare di più e chiedevo aiuto a chi vuole divertircisi un pò. Se è troppo la pappa pronta, aiutatemi ad arrivarci!!!
    Prima o poi anch'io vi insegnerò qualcosa

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    no, no
    semplicemente non mi era chiaro che l' unica differenza fosse l' anno a 2 cifre

    oltre alla modifica alla regexp che gia' hai apportato (\d{2} al posto di \d{4})
    cambia anche
    && date.getFullYear()==arrDate[2]
    in
    && date.getFullYear().substr(2)==arrDate[2]

    se posso, ti consiglio due accorgimenti
    qui
    onBlur='return controllo_data_o_niente(this.name);'
    il return lo puoi togliere, non riuscirai a bloccare un blur semplicemente ritornando false
    il browser non lo permette per evitare di lasciare l' utente "incastrato" in un campo

    poi, passi this.name, ma poi lo valuti come un id (id che tra l' altro non e' specificato per quell' elemento!)
    solo IE puo' farlo passare senza generare errore
    passa solo this alla funzione
    function controllo_data_o_niente(v)
    e rimuovi questo
    var v=document.getElementById(variabile);

    ciao

  5. #5
    Non riuscendo sul momento, avevo momentaneamente abbandonato questo codice fino a quando non mi fosse stato assolutamente necessario: ora.

    Per vari motivi, il mio script è diventato quello che riporto sotto:

    function DAT_GGMMAA_O_NIENTE(inputtext,form) {
    var errore='La data inserita non è corretta. Il formato giusto è "gg/mm/aa"';
    var _valore=inputtext.value;
    var _nome=inputtext.name;
    var validDate=false;
    if (_valore.length!=0) {
    if(_valore.match(/\d{2}\/\d{2}\/\d{2}/)){
    var arrDate=_valore.split('/');
    var date=new Date(arrDate[2],arrDate[1]-1,arrDate[0]);
    if (date.getDate()==arrDate[0] && date.getMonth()==arrDate[1]-1&& date.getFullYear().substr(2)==arrDate[2]){
    validDate=true;
    }
    }
    if (!validDate){
    alert(errore);
    eval("document."+form+"."+_nome+".focus();");
    eval("document."+form+"."+_nome+".select();");
    }
    } else {
    /* alert('Non ci sono caratteri inseriti.'); */
    }
    }

    e lo richiamo così:

    <input type='text' class='textbox' style='width:70px;' name='data13' value='04/12/10' onkeypress='return DAT(this, event);' onBlur='return DAT_GGMMAA_O_NIENTE(this,this.form.name);' maxlength='8'>

    Ho apportato le modifiche suggerite, o almeno c'ho provato, ma non mi funge!!!
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    non funziona la verifica della data? da un occhiata veloce non mi pare ci siano errori...

  7. #7
    Si parlo proprio di quella, non funziona.
    Prima o poi anch'io vi insegnerò qualcosa

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    guarda che funziona correttamente... non capisco quale sia il problema!

    _valore.match(/\d{2}\/\d{2}\/\d{2}/))

    cosi controlli che il formato sia corretto...

    var date=new Date(arrDate[2],arrDate[1]-1,arrDate[0]);
    if (date.getDate()==arrDate[0] && date.getMonth()==arrDate[1]-1&& date.getFullYear().substr(2)==arrDate[2])

    e cosi controlli che la data non sia sballata (es. 32/12/10)


  9. #9
    boo, adesso sembra funzionare anche a me , ti ringrazio molto.
    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.