Newsgroup: it.comp.lang.javascript
Titolo: Perchè funziona a metà?

<script language="JavaScript" type="text/javascript">
function ValidaCampi() {
if ((document.registrazione.societa.value == "")){
	document.registrazione.societa.style.backgroundColor="red"; 
document.registrazione.societa.focus(); return false; }
else
if ((document.registrazione.indirizzo.value == "")){
	document.registrazione.indirizzo.style.backgroundColor="red"; 
document.registrazione.indirizzo.focus(); return false;}
else
if ((document.registrazione.piva.value == "")){
	document.registrazione.piva.style.backgroundColor="red"; 
document.registrazione.piva.focus(); return false;}
else
if ((document.registrazione.telefono.value == "")){
	document.registrazione.telefono.style.backgroundColor="red"; 
document.registrazione.telefono.focus(); return false;}
else
if ((document.registrazione.email.value == "")){
	document.registrazione.email.style.backgroundColor="red"; 
document.registrazione.email.focus(); return false;}
return true;
}
function condizioni()
{
if(document.registrazione.privacy.checked==false)
   {
   alert('Devi accettare le condizioni per poter usufruire del servizio!')
   return false;
   }
else
   return true;
}
function partitaIVA(sz_Codice)
    {
    var n_Val,n_Som1=0,n_Som2=0,lcv;
    if (sz_Codice.length!=11 || isNaN(parseFloat(sz_Codice)) || 
parseFloat(sz_Codice)<parseFloat(0))
       return false;
    for (lcv=0;lcv<9;lcv+=2)
    {
       n_Val=parseInt(sz_Codice.charAt(lcv));
       n_Som1+=n_Val;
       n_Val=parseInt(sz_Codice.charAt(lcv+1));
       n_Som1+=Math.floor(n_Val/5) + (n_Val<<1) % 10;
    }
    n_Som2 = 10 - (n_Som1 % 10);
    n_Val=parseInt(sz_Codice.charAt(10));
    if (n_Som2==n_Val)
       return true;
    return false;
    }
function CheckPiva()
    {
    var PIvaOk=partitaIVA(document.registrazione.piva.value)
    if (PIvaOk==false)
       {
       alert("Partita IVA errata");
       return false;
       }
    else
       return true;
    }
function ControllaMail()
    {
    EmailAddr = document.registrazione.email.value;
    Filtro = 
/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
    if (Filtro.test(EmailAddr))
       return true;
    else
       {
       alert("E-mail errato. Controlla l'indirizzo di e-mail inserito");
       document.registrazione.email.focus();
       return false;
       }
    }
function CheckMail(){
   // Verifico che le due mail siano uguali, in caso contrario avverto
   // dell'errore con un Alert
   if (document.registrazione.email.value != 
document.registrazione.email_retype.value) {
     alert("Le due email non coincidono!")
     document.registrazione.email_retype.focus()
     document.registrazione.email_retype.select()
     return false
   }
   return true
}
</script>
<form name="registrazione" method="post" action="memorizza.asp" 
onSubmit="return condizioni();return ValidaCampi();return 
CheckPiva();return ShowProgress();">
--
Scream - SORRIDI! :) Domani sarà peggio...

 CheckPiva();return ShowProgress();">
Poi, non e' proprio utile mettere una sfilza di return nel gestore
dell'evento... perche' cosi' si interrompe l'esecuzione appena incontra il
primo. Nel tuo esempio, viene eseguita solo la funzione condizioni(),
quindi l'handler dell'evento onsubmit termina l'esecuzione a causa del
(primo) return.
La soluzione, nel tuo caso, sarebbe (visto che il submit deve avvenire solo
se le condizioni di verifica sono tutte vere):
onsubmit="return (condizioni() && ValidaCampi() && CheckPiva() &&
ShowProgress())"
Per spiegarti meglio, ti posto questo semplice esempio chiarificatore che
ti invito a testare per capire cosa succede:
<html>
<head><title>:: TEST ::</title></head>
<body>
<a href="javascript:alert('submit!!!')" onclick="return
confirm('condizioni'); return confirm('valida campi'); return
confirm('check pIva'); return confirm('show progress');">come hai fatto
tu</a> | <a href="javascript:alert('submit!!!')" onclick="return
confirm('condizioni') && confirm('valida campi') && confirm('check pIva')
&&  confirm('show progress')">come andrebbe fatto</a>
</body>
</html>
-- 
~Nando~ :-/__.oO
Apostolo della Prova

 ShowProgress())"
Occorre perň capire se serve eseguirle sempre tutte...cioč, come hai
scritto se condizioni() č false le parti dopo NON vengono eseguite.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 scritto se condizioni() č false le parti dopo NON vengono eseguite.
Infatti, chiaramente. Del resto basta che uno solo dei controlli di
validita' dia esito negativo affinche' venga bloccato il submit... vero
anche che sarebbe opportuno informare l'utente circa *tutti* gli errori che
ha commesso e in questo caso hai ragione, e' necessario eseguire tutti i
controlli... Avevo messo giu' una cosa giusto per spiegare perche' non
funzionasse...
Una soluzione, credo, potrebbe consistere nel metter su una funzione unica,
che so formCheck(), che esegue tutte le funzioni necessarie e restituisce
true o false (esegui o blocca il submit) a seconda degli esiti di tutti i
controlli e che, magari, costruisce una stringa completa di informazioni da
fornire all'utente. Ma queste sono bazzecole per voi :-)


 controlli... 
E' una cosa che va decisa in base allo scopo, e che quindi deve saperlo
Scream; per questo lo ho sottolineato (non per fare le pulci a te, ma per
far notare la cosa a Scream).
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 (non per fare le pulci a te, ma per far notare la cosa a Scream).
Nono, sappiamo benissimo che fare e farti fare "le pulci" ti piace
tantissimo.
(tra l'altro, č proprio un modo di dire che non capisco. Cioč ne capisco il
senso, ma non ne capisco la ragion d'essere)
-- 
~ Io sono il piů importante dei miei problemi.

 senso, ma non ne capisco la ragion d'essere)
:-) in effetti...probabilmente è un qualcosa del tipo "cercare le cose
minuscole", però in effetti se uno ha le pulci farebbe bene a cercarle,
anche se minuscole, mi sa che sono parecchio fastidiose!
Che poi se, "per esempio" [...], ti rispondessi "coda di paglia eh?", anche
questo cazzo vuol dire???


 (non per fare le pulci a te, ma per far notare la cosa a Scream).
Sono permaloso... ma non fino a questo punto :)


 questo cazzo vuol dire???
Beh, la ragione d'essere questa ce l'ha.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 a meta'"... ;-)
Preciso che non ho ancora avuto modo di testare le varie risposte. 
Comunque le condizioni sono queste:
Supponiamo che l'utente non compila la form che è vuota eccetto il campo 
"accetta condizioni" già checked. Quindi la check è checked, ma la form 
è vuota. Ovviamente parte il controllo ValidaCampi che indica all'utente 
tramite evidenziazione rossa che i campi devono essere compilati.
L'utente compila la form...
se va nel campo "piva" ed inserisce 012345678912 nel momento che passa 
al campo successivo parte il controllo CheckPiva.
Inserisce la Partita iva corretta, ma mette come email "fffff" 
ovviamente appena esce dal campo si inserisce il controllo ControllaMail 
che in questo caso avvisa l'utente che l'indirizzo non ha un formato valido.
Benissimo, passa al campo successivo, ma stavolta controlla che il campo 
email_retype sia uguale al campo email tramite il controllo CheckMail.
Arriva alla fine e decide di inviare. Perfetto in questo caso viene 
mostrata una barra di progresso "ShowProgress" che indica il caricamento 
di alcuni file.
Questo se tutto va bene, ma supponiamo che arrivi alla fine e decida di 
non accettare le condizioni. Ok in questo caso la form non deve essere 
inviata, ma deve comparire un bel Alert che avvisa che è obbligatorio 
accettare le condizioni (controllo condizioni)
Questo è quanto vorrei fare.
Siccome di javascript non ne capisco nulla mi sono limitato a 
concatenare le istruzioni che servivano a fare ogni singola cosa. 
Peccato che nell'unico test che ho fatto la compilazione veniva 
richiesta, ma non accettando le condizioni la form veniva comunque spedita.


 Comunque le condizioni sono queste:
Tutto piu' o meno chiaro... vabbe', ora tocca a te: studiati i post in
questo thread :)


 Un culo che s'infiamma veloce? :-)
ROTFL ! non so, non è proprio questo il significato...
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.