- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- Concatenare 2 funzioni di controllo modulo JavaScript in onsubmit
-
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 inviarlola prima per controllare se risultavano inseriti i valori nei campi
la seconda per evitare l'invio del form più volte da stesso utenteclaudioweb 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 dovrebbeecco 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"> </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
-
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.phtmlIn questo modo, richiami solo una funzione che solo dopo aver fatto i controlli, se è tutto ok invia i dati.
-
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 oggettoho 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
-
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
-
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 ideeecco 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 trueif (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
-
Ciao!
Redart per favore potresti postare il codice di un esempio? Perchè ho provato ma nn viene niente...Grazie mille!
Paolo
-
Cè nessuno?