• User

    Concatenare 2 funzioni di controllo modulo JavaScript in onsubmit

    Salve,

    riprendo un problema emerso in una discussione chiusa
    Ho avuto questo problema: non riuscivo a capire come racchiudere in onsubmit 2 funzioni di controllo del modulo prima di inviarlo

    la prima per controllare se risultavano inseriti i valori nei campi
    la seconda per evitare l'invio del form più volte da stesso utente

    claudioweb mi ha suggerito di concatenare le 2 funzioni con un'altra
    del tipo:

    
    <script type="text/javascript" language="javascript">
    <!--
    function controllo()
    {
    verify();
    validate(form1);
    }
    //-->
    </script>
    

    e poi all'interno del modulo

     <form method=post action=pagina.php name=form1 onsubmit="controllo()">
    

    ho fatto come indicato, ho provato ma succede questo:

    raggiunto il limite di invio posto ad esempio a 2 (ma vale anche se diverso da 2) succede che dopo aver cliccato su "INVIA" l'alert dei cookie si attiva e, dopo aver chiuso il box alert, il form viene inviato ugualmente e finisco nella pagina php dove è inserito il codice per l'invio mail e i ringraziamenti
    ho fatto una piccola modifica nella funzione validate() per il controllo dei cookie inserendo dopo l'alert("Form già inoltrato, non è possibile inviarlo nuovamente.")

     {form_registra.action='graziegiàfatto.php';
    } 
    return false
    }
    

    e ho risolto il problema, form non più inviato se si è raggiunto il limite e indirizzamento verso altra pagina

    resta però un grosso problema legato alla prima funzione della verifica preventiva dei campi

    se ad esempio un campo è vuoto, e clicco su "INVIA" si attiva il box alert
    ma chiudendolo, invece di restare sulla stessa pagina e avere la possibilità di riempirlo come accadeva prima
    vengo subito indirizzato nella pagina php dove è inserito il codice per l'invio mail e i ringraziamenti
    praticamente la verify() non funziona come dovrebbe

    ecco un esempio pratico con solo un paio di campi
    è un pò lunghetto:

    
    <script language="JavaScript">
    
    function verify() {
    var d;
    d = document.forms[0];
    if (d.nome_azienda.value == '') 
    {
    alert('Inserisci il nome della tua azienda');
    return false;
    } 
    if (d.via.value == '') 
    {
    alert('inserisci la via');
    return false;
    } 
    if (d.autorizzo.checked)
    {
    }
    else
    {
    alert('accosenti al trattamento dei tuoi dati');
    return false;
    } 
    return true;
    }
    
    
    var maxSubmits = 5
    function validate(frm)
    { 
    var totalSubmits = eval(GetCookie('TotalSubmissions'))
    if (totalSubmits == null)
    totalSubmits = 0
    
    if (totalSubmits >= maxSubmits)
    {
    alert("Form già inoltrato, non è possibile inviarlo nuovamente.") 
    {form1.action='grazie.php';
    } 
    return false
    }
    else
    { 
    totalSubmits = totalSubmits + 1
    BakeIt(totalSubmits, "TotalSubmissions")
    return true
    }
    }
    function ResetCounter()
    {
    BakeIt(0, "TotalSubmissions")
    }
    function BakeIt(cookieData, cookieName) 
    {
    
    var days = 999;
    var expires = new Date ();
    expires.setTime(expires.getTime() + days * (24 * 60 * 60 * 1000)); 
    
    SetCookie(cookieName, cookieData, expires);
    }
    function SetCookie(cookieName, cookieData, expireDate) 
    {
    document.cookie = cookieName + "=" + escape(cookieData) + "; expires=" + expireDate.toGMTString();
    } 
    function GetCookie(name) 
    {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
    return GetCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
    }
    return null;
    }
    function GetCookieVal (offset) 
    {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
    endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
    }
    
    function controllo()
    {
    verify();
    validate();
    }
    
    </SCRIPT>
    
    <html>
    <body>
    <table width="640" border="0" cellspacing="0" cellpadding="0">
    <form method=post action=fine.php name=form1 onsubmit="return controllo()">
    <tr>
    <td width="315" align="left" valign="top" class="testoSX">
    <font face="Arial" size="2">
    <br>
    </font>
    <table width="315" border="0" cellspacing="0" cellpadding="0">
    <tr> 
    <td height="20" colspan="2" align="left" valign="top" class="testo">
    &nbsp;</td>
    </tr>
    
    
    <tr> 
    <td width="165" class="testo">
    <font face="Arial" size="2">Nome azienda</font></td>
    <td width="150" class="testo"><font face="Arial"><input name="nome_azienda" type="text" class="noteInput" size="25"></font></td>
    </tr>
    <tr bgcolor="#F8F8F8"> 
    <td width="165" bgcolor="#FFFFFF" class="testo">
    <font face="Arial" size="2">Via</font></td>
    <td width="150" class="testo" bgcolor="#FFFFFF"><font face="Arial"><input name="via" type="text" class="noteInput" size="25"><font size="2">
    </font></font> 
    </td>
    </tr>
    </table>
    <p>
    <font face="Arial" size="2">
    <br> </font> </p>
    <table width="315" border="0" cellspacing="0" cellpadding="0">
    <tr bgcolor="#F8F8F8"> 
    <td valign="middle" class="testo" bgcolor="#FFFFFF"><font face="Arial"><input name="autorizzo" type="checkbox" value="1" checked></font></td>
    <td class="testo" bgcolor="#FFFFFF"><font face="Arial" size="2">Autorizzo il trattamento e la comunicazione 
    dei dati.</font></td>
    </tr>
    </table>
    <p>
    <font face="Arial" size="2">
    <br> </font> </p>
    <p align="center"> 
    <font face="Arial"> 
    <input name="submit" type=submit class="testoSmall" value=prosegui><font size="2">
    </font></font>
    </p> </td>
    </tr>
    </table>
    </body>
    </html>
    
    

    come risolvere questo problema?

    Un saluto

    Claudioweb: usa il tag [code], altrimenti si capisce poco, grazie 🙂


  • Super User

    Il problema è di facile soluzione se affidi il submit del form sempre a javascript

    document.NomeForm.submit();
    

    Maggiori informazioni qui:
    http://www.javascript-coder.com/javascript-form/javascript-form-submit.phtml

    In questo modo, richiami solo una funzione che solo dopo aver fatto i controlli, se è tutto ok invia i dati.

    :ciauz:


  • User

    Ciao,

    non ho ben capito come e dove inserire

    document.form1.submit();

    inserendolo semplicemente nel codice javascript mi da errore
    dicendo che 'document.form1' è nullo o non è un oggetto

    ho fatto diverse prove ma non capisco dove sbaglio

    si deve creare una nuova funzione del tipo:

    function submitform()
    {
    document.form1.submit();
    }

    ho provato ma non funziona

    oppure unirlo alla function controllo() o altro ancora?

    come modificare il codice HTML poi, se questo va modificato?

    Un saluto


  • Super User

    Nella pagina che ti ho indicato ci sono degli esempi completi, prova a trarre spunto da quel codice ed adattalo alla tue esigenze.

    Come prima cosa ti consiglio di usare correttamente le virgolette

    name="form1"
    ``` e non ```
    name=form1
    

    :ciauz:


  • User

    Finalmente sono riuscito a trovare una soluzione

    era piuttosto semplice
    ma quel link che mi avevi dato claudioweb mi è servito a poco, se non a confondermi le idee

    ecco la soluzione:

    in onsubmit si deve richiamare una sola funzione
    nel mio caso onsubmit="verify()"

    all'interno poi della funzione usata si fa un piccolo richiamo all'altra
    dicendo prima del return true

    if (altrafunzione()==false)
    { return false;}

    Spero di aver portato un piccolo contributo e di essere di aiuto a chi ha o avrà un problema simile al mio

    Ringrazio claudioweb per l'interesse e la disponibilità

    Un saluto


  • User Attivo

    Ciao!
    Redart per favore potresti postare il codice di un esempio? Perchè ho provato ma nn viene niente...

    Grazie mille!
    Paolo


  • User Attivo

    Cè nessuno?