Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di ky
    Registrato dal
    May 2001
    Messaggi
    66

    controllo campi form pieni e corretti...

    Ciao ragazzi!
    Vi chiedo un grande aiuto...Ho cercato di inserire dei js per controllare che i campi obbligatori del mio form venissero riempiti e per controllare che il cod. fisc o la p.iva inseriti avessero una sintassi corretta... il tutto prima di inviare i dati al server...
    pero' non mi funziona niente! Io posso anche non inserire nulla che non mi da' alcun errore...
    Mi potete aiutare per favore?
    Vi lascio l'html della pag. di prova:

    <html>
    <head>

    <script language="JavaScript">
    <!--

    function ControllaCF(cf)
    {
    var validi, i, s, set1, set2, setpari, setdisp;
    if( cf == '' ) return '';
    cf = cf.toUpperCase();
    if( cf.length != 16 )
    return "La lunghezza del codice fiscale non è\n"
    +"corretta: il codice fiscale dovrebbe essere lungo\n"
    +"esattamente 16 caratteri.\n";
    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for( i = 0; i < 16; i++ ){
    if( validi.indexOf( cf.charAt(i) ) == -1 )
    return "Il codice fiscale contiene un carattere non valido `" +
    cf.charAt(i) +
    "'.\nI caratteri validi sono le lettere e le cifre.\n";
    }
    set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    s = 0;
    for( i = 1; i <= 13; i += 2 )
    s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    for( i = 0; i <= 14; i += 2 )
    s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
    return "Il codice fiscale non è corretto:\n"+
    "il codice di controllo non corrisponde.\n";
    return "";
    }


    function ControllaPIVA(pi)
    {
    if( pi == '' ) return '';
    if( pi.length != 11 )
    return "La lunghezza della partita IVA non è\n" +
    "corretta: la partita IVA dovrebbe essere lunga\n" +
    "esattamente 11 caratteri.\n";
    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
    if( validi.indexOf( pi.charAt(i) ) == -1 )
    return "La partita IVA contiene un carattere non valido `" +
    pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
    }
    s = 0;
    for( i = 0; i <= 9; i += 2 )
    s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    for( i = 1; i <= 9; i += 2 ){
    c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    if( c > 9 ) c = c - 9;
    s += c;
    }
    if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    return "La partita IVA non è valida:\n" +
    "il codice di controllo non corrisponde.\n";
    return '';
    }


    function verifica()
    {
    cod = document.form1.cod.value;
    document.form1.cod.focus();

    if( cod == '' )
    err = "hai lasciato in bianco il campo!\n";
    else if( cod.length == 16 )
    err = ControllaCF(cod);
    else if( cod.length == 11 )
    err = ControllaPIVA(cod);
    else
    err = "Il codice introdotto non è valido:\n\n" +
    " - un codice fiscale deve essere lungo 16 caratteri;\n\n" +
    " - una partita IVA deve essere lunga 11 caratteri.\n";

    if( err > '' )
    alert("VALORE ERRATO\n\n" + err + "\nCorreggi e riprova!");
    else
    alert("Il codice è valido.");
    }


    function validateThis(form){

    if ( Trim(form.NOME.value) == "" ){
    alert("Inserire il campo Nome")
    form.NOME.focus();
    return false}

    if ( Trim(form.COGNOME.value) == "" ){
    alert("Inserire il campo Cognome")
    form.COGNOME.focus();
    return false}

    }

    //-->
    </script>
    </head>


    <body>
    <form action="/cgi-bin/controllo.pl" method="POST">
    <table border=0 cellspacing=0 cellpadding=6 width="100%">

    Inserisci i tuoi dati:



    <tr>
    <td class=fclbg1 align=right width="46%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000">Codice
    Fiscale </font></td>
    <td class=fclbg2 width="54%">
    <input type=text name="CF" value="" size="20" maxlength="50">
    </td>
    </tr>
    <tr>
    <td class=fclbg1 align=right width="46%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000">Nome</font></td>
    <td class=fclbg2 width="54%">
    <input type=text name="NOME" value="" size="20" maxlength="50">
    </td>
    </tr>
    <tr>
    <td class=fclbg1 align=right width="46%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000">Cognome</font></td>
    <td class=fclbg2 width="54%">
    <input type=text name="COGNOME" value="" size="20" maxlength="20">
    </td>
    </tr>
    <tr>
    <td class=fclbg1 align=right width="46%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000">Clicca per proseguire</font></td>
    <td class=fclbg2 width="54%">
    <input type="submit" name="Submit" value="Continua &gt;&gt;" onClick="verifica(CF);return validateThis(form)">
    </td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    Grazie ancora! CIAO!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Questi controlli vengono fatti meglio con le RE.

    Per esempio un RE per il codice fiscale potrebbe essere:

    REcf = /^[a-zA-Z]{3}\s*[a-zA-Z]{3}\s*\d{2}[a-zA-Z]\d{2}\s*[a-zA-Z]\d{3}[a-zA-Z]$/;

    che puoi applicare alla stringa in:

    if(REcf.test(str1)) alert("il CF e` corretto");

    Nota: questo non esegue il controllo dell'ultimo carattere.

    In aternativa puoi prima filtrare gli spazi:
    str1 = str1.replace(/\s/g,"");
    poi applicare una RE piu` semplice:
    REcf1 = /^[a-zA-Z]{6}\d{2}[a-zA-Z]\d{2}[a-zA-Z]\d{3}[a-zA-Z]$/;

    Comunque il tuo problema e` un altro:
    <input type="submit" name="Submit" value="Continua &gt;&gt;" onClick="if(verifica(CF))return validateThis(form); else false;">

    Ricordati anche di uscire sempre conun return false; in caso di errore, altimenti e` implicito return true; e il campo/form viene validato.

    A parte che preferirei vedere il test fatto sul onSubmit del form, altrimenti puoi inviare il form per mezzo della tastiera (tab opportuni e return).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di ky
    Registrato dal
    May 2001
    Messaggi
    66
    Ciao Michele! Grazie 1000 per il tuo pronto intervento e i tuoi preziosi consigli...
    purtroppo pero', neanche così mi funziona...
    non succede assolutamente nulla.
    Ho provato anche a mettere il comando con onSubmit, ma è la stessa cosa...nn so, devo aver sbagliato qualcosa nel codice, ma non riesco a trovare l'errore dato che nn me ne intendo di js.
    Ti prego, dammi ancora un aiutino! Grazie 10000000!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    A parte la modifica che ti ho detto, hai cambiato (quasi) tutti i return dello script in
    return false;

    Nel caso in cui ci sia return qualcosa, fai meglio mettere:
    alert(qualcosa);
    return false;

    Gli unici casi dove invece ci deve stare return true; e` dove il programma ritorna dopo aver verificato che tutto e` corretto (in generale una volta solo in ogni funzione).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it L'avatar di ky
    Registrato dal
    May 2001
    Messaggi
    66
    ma così come avevo scritto non è giusto?
    if ( Trim(form.NOME.value) == "" ){
    alert("Inserire il campo Nome")
    form.NOME.focus();
    return false}
    c'e' l'alert, mi dovrebbe posizionare il cursore nel punto non compilato (focus) e poi c'è return false...
    pero' nn me ne compare neanche uno di questi messaggi alert quando non compilo i campi...
    non riesco proprio a capire...questi js li ho copiati, ma se conosci un metodo migliore per ottenere lo stesso risultato, ben venga!

    Grazie ancora per il tuo aiuto!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    La logica del tuo programma e` giusta, ma l'uso di alcune variabili non proprio.

    1. non usare nomi riservati (ad esempio form e` nome riservato, camibialo ad es in form1);

    2. il passaggio di qualche parametro non e` corretto:

    function nomefun(form1) {
    ...
    }

    il nome del form viene passato con
    onSubmit="nomefun(this);" // nel tag form
    onClick="nomefun(this.form);" // nel tag input

    Puoi anche metter un alert appena entrato nelle funzioni, per vedere se entra nelle funzioni.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it L'avatar di ky
    Registrato dal
    May 2001
    Messaggi
    66

    niente da fare...continuo a non riuscirci...

    Ricominciamo da zero...
    Io ho un form con questi campi obbligatori:
    Cod. Fiscale
    Nome
    Cognome
    Citta'

    Il codice è questo:
    <html>
    <head>
    <script src="mix_func_js"></script>
    <script language="JavaScript">
    <!--
    function validateThis(form){

    if (form.cf.value == "" ){
    alert("Inserire il campo Codice Fiscale")
    form.cf.focus();
    return false}

    if (form.nome.value == "" ){
    alert("Inserire il campo Nome")
    form.nome.focus();
    return false}

    if (form.cognome.value == "" ){
    alert("Inserire il campo Cognome")
    form.cognome.focus();
    return false}


    if (form.citta.value == "" ){
    alert("Inserire il campo Citta")
    form.citta.focus();
    return false}

    }
    //-->
    </script>
    </head>

    <body>
    <form action="/cgi-bin/prova.pl" method="POST">

    <table>
    <tr>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <font color="#FF0000">Codice Fiscale</font></font></td>
    <td width="40%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <input type=text size=20 name="cf" maxlength=16 value="">
    </font></td>
    </tr>


    <tr>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <font color="#FF0000">Nome</font></font></td>
    <td width="40%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <input type=text size=20 name="nome" maxlength=17 value="">
    </font></td>
    </tr>


    <tr>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <font color="#FF0000">Cognome</font></font></td>
    <td width="40%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <input type=text size=20 name="cognome" maxlength=18 value="">
    </font></td>
    </tr>
    <tr>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Città</font></td>
    <td width="40%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
    <input type=text size=20 name="citta" maxlength=17 value=""></font><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#FF0000">
    </font></td>
    </tr>
    <tr>
    <td colspan=3 align=center>
    <input type=submit value="Indietro" name="back">
    <input type=submit value="Prosegui &gt;&gt;" name="submit" onClick="return validateThis(form)" >
    </td>
    </tr>
    </table>
    </form>
    </body>
    </html>



    Quando clicco su PROSEGUI e uno o + campi non sono compilati, esce il messaggio alert "Compila il campo xxx" e il focus si posiziona nel campo vuoto...
    ... e fin qui funziona!

    Ora, come faccio ad aggiungere al campo Cod. fisc. anche un controllo sulla correttezza del codice inserito? Non riesco a combinare due js insieme...

    Mi potete aiutare? Per favore...mi sto fondendo il cervello a forza di cercare una soluzione e di fare prove...
    Grazie!

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Mi sa proprio che hai fuso. La soluzione e` molto semplice. Pero` devi anche apportare le modifiche che ti vengono proposte, altrimenti casca il palco.

    codice:
    <script language="JavaScript"> 
    <!-- 
    function validateThis(form1){ 
    
      if (form1.cf.value == "" ){ 
        alert("Inserire il campo Codice Fiscale") 
        form1.cf.focus(); 
        return false;
      } 
    
      if (form1.nome.value == "" ){ 
        alert("Inserire il campo Nome") 
        form1.nome.focus(); 
        return false;
      } 
    
      if (form1.cognome.value == "" ){ 
        alert("Inserire il campo Cognome") 
        form1.cognome.focus(); 
        return false;
      } 
    
    
      if (form1.citta.value == "" ){ 
        alert("Inserire il campo Citta") 
        form1.citta.focus(); 
        return false;
      } 
      return ControllaCF(form1.cf.value); // test correttezza codice fiscale
    } 
    //--> 
    </script>
    Nota che il codice di ritorno della funzione Controlla CF viene riportato al modulo, per cui se tale codice e` true il modulo viene inviato, altrimenti no.
    Nota ancora che ho passato il valore del campo alla funzione, per cui la funzione ControllaCF conosce tale valore ma non l'oggetto (non sara` possibile fare un focus() ).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it L'avatar di ky
    Registrato dal
    May 2001
    Messaggi
    66

    grazie mich, pero'.....

    Ciao Michele, scusa se nn ho seguito per bene i tuoi consigli...pero' io sono vincolata alla struttura di base di questo form...perche' questa pagina fa parte di un sito moooolto + grande... e tutte le pag. con richiesta di dati sono compilate in questo modo, quindi anch'io devo uniformarmi a questo standard.

    Purtroppo io sono nuova, e mi hanno affidato l'incarico di aggiungere a questo form un controllo + preciso su cod. fiscale e su partita iva (cioè che oltre a controllare che il campo sia compilato, controlli anche se è corretto, ma senza modificare ciò che c'era prima..)
    E' possibile tutto cio'? (quindi senza modificare il nome del form in form1...ecc ecc.?)

    Basterebbe inserire nel controllo del campo cod. fiscale che:
    - se tale campo è vuoto, alert "Compila il campo Cod. Fiscale)
    - se è pieno, passa alla funzione che controlla il codice e, se questa da ok, continua col controllo degli altri campi, altrimenti mi restituisce un alert "Il cod. fiscale inserito non è corretto"

    Secondo te è possibile tutto cio'?
    Grazie Michele!

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    La risposta te l'ho gia` data con il post precedente.
    Pero` se usi il nome form potresti avere delle sorprese (trovi sicuramente un browser (oggi o tra qualche mese) che si impalla, e poi vallo a cercare l'errore (tra l'altro dopo che hai perso il cliente).

    Per iniziare prova a modificare lo script come ti ho detto, e fai la routine ControllaCF() in questo modo:

    function ControllaCF(cod){
    alert("sto controllando il codice "+cod);
    (if cod.length < 10) {
    return false;
    } else {
    return true;
    }
    }

    In questo modo separi i problemi: sistemi la prima routine e quando e` a posto provi la seconda (fai le prove con un codice piu` corto di 10 e piu` lungo di 10 caratteri).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.