Newsgroup: it.comp.lang.javascript
Titolo: [INFO] gestione FORM con più action

Ciao a tutti
ho questo problema, ho un form con 5 campi , 4 sono obbligatori e sin
qui tutto ok se non si inseriscono viene rischieto il loro
inserimento, ora perņ devo aggiungere una nuova action che tenga conto
solo di 3 campi obbligatori e non di tutti e 4 quelli della mia form.
Come si gestisce tale situazione? 
Ciao Filippo

 Come si gestisce tale situazione? 
Dipende da cos'e' che fa scatenare la discriminazione tra un action e
l'altra; e dipende anche da come hai fatto la gestione dei campi
obbligatori.
Facciamo un esempio che sia un campo checkbox a determinare il tipo di
action, a quel punto nella tua funzione di validazione, che avrai
richiamato dall'onsubmit della form:
<form name="myform" action="defaultaction.php" method="post"
onsubmit="return formValidate(this)">
avrai un codice del tipo:
function formValidate(sender){
var bValidate=true;
/* fai il controllo sui tre campi comuni 
   se qualcosa non torna, imposti bValidate a false
*/
.
.
.
/* Poi controlli se il checkbox e' avvalorato */
	if (sender.chkChoice.checked){
		/* in tal caso cambi la action */
		sender.action="threeaction.php";
	}else{
		/* altrimenti lasci l'action cosi' com'e', ma controlli il 4° campo 
		   se qualcosa non torna, imposti bValidate a false.
		*/
		.
		.
	}
/* esci dalla funzione, dando il risultato di validazione corretta o meno.
return bValidate;
}
Questo e' uno schema per restare sul generico; ad esempio invece di
bValidate potresti avere direttamente una stringa che traccia i campi
lasciati vuoti, e poi alla fine controlli che la stringa sia vuota (in quel
caso e' tutto ok e ritorni true) oppure no (allora ha tracciato messaggi
d'errore, la mostri a video con un alert e ritorni false).. tutto sta nel
come hai gestito precedentemente il codice.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
che sara', non cambia cio' che e'.
Sta a te decidere poi come prendere questa cosa,se logorarsi per un passato
che non puoi cambiare, invece di prendere tutto il bene che il presente ti
offre." ()

 wrote:
[CUT]
l'ho gestito con Cold fusion che utilizza come form il comando  cfform
e come oggetti  cfinput ecc..
quindi il mio campo obbligatorio č:
<cfinput name="codice1" type="text" id="codice1" size="3"
maxlength="3" required="yes" message="Devi Inserire un Codice1">
Mi era venuta una idea:
Io ho un form principale all'intero di questo ne creo un'altro con tre
campi hidden e sull'onchange di quelli del principale passo i valori a
quelli e poi la action parte da quello secondario e non dal principale
Puň essere una buona idea?
Ciao Filippo

 Puň essere una buona idea?
Ma scrivertelo a mano da solo, non fai prima? ^_^"
Non puoi gestirti in modo autonomo, senza affidarti a cold fusion, la
scritta del form in questione? Cosi' risolvi in modo elegante tutti i tuoi
problemi.. le altre alternative mi sembrano piuttosto toppe.
Pero', ti ripeto, io non conosco Cold Fusion, quindi non so che paletti o
che liberta' ti possa offrire.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)


in questo caso credo che bisognerà farselo a mano! :-)

ho fatto in queto modo
onMouseDown="verifica_ok()" e onMouseDown="verifica_ok()" sui due
input submit del mio form e poi 
function submit_ok () 
{
 if
(document.formuno.a.value!=""&&document.formuno.b.value!=""&&document.formuno.c.value!=""
&&document.formuno.d.value!="" &&document.formuno.e.value!="")
  act('inserimento_act.cfm');
 else
 alert('I Campi a , b , c , d , e  sono obbligatori');
}
function verifica_ok () 
{
 if
(document.formuno.a.value!=""&&document.formuno.b.value!=""&&document.formuno.c.value!="")
  act('verifica_act.cfm');
 else
 alert('I Campi a, b, c sono obbligatori');
}
function act(url)
{
document.formuno.action=url
}

 input submit del mio form e poi 
Usa onclick :)
[code-cut]
Io avrei fatto in modo differente, come ti ho mostrato nell'altro mio
codice.
Riprendendo in parte il codice che ti ho dato:
<form name="myform" action="verifica_act.cfm" method="post">
<!-- la tua form -->
	<input type="submit" name="btnSubmit" id="btnSubmit" onclick="return
formValidate(this)" value="Invia" />
<input type="submit" name="btnSubmit2" id="btnSubmit2" onclick="return
formValidate(this)" value="Invia2"/> 
<!-- non conosco lo scopo del secondo pulsante :P quindi non dargli un nome
sano :P-->
</form>
function formValidate(sender){
/* fai il controllo sui tre campi comuni */
	var f=sender.form,
		szErrorMessage="";
	szErrorMessage+=f.a.value!=""?",a":"";
	szErrorMessage+=f.b.value!=""?",b":"";
	szErrorMessage+=f.c.value!=""?",c":"";
	/* nel caso sia stato premuto il primo bottone di submit.. */
	if (
sender.name
=="btnSubmit"){
		/* controlla anche il quarto campo e cambia l'action */
		szErrorMessage+=f.d.value!=""?"d":"";
		f.action="inserimento_act.cfm";
	}else{
		f.action="verifica_act.cfm";
	}
 
	/* se e' stato riscontrato anche un solo errore.. */
	if (szErrorMessage){
		alert("Attenzione! I seguenti campi sono obbligatori:
"+szErrorMessage.substring(1));
		return false;
	}
 
	return true;
}
Scritto al volo, ma dovrebbe andare.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
