Newsgroup: it.comp.lang.javascript
Titolo: blocco esecuzione script

ho un form, con una funzione su onSubmit:
<form ..... onSubit='obbligatorio('DataOff',' Data Offerta')'
function obbligatorio(campo,nome)
{
     var valore = document.getElementById(campo).value;
     var etichetta = nome;
     if (valore.length==0)  {
        alert("Il valore di ' + etichetta + ' è obbligatorio!")  ;
        return( false );
    }
}
però viene caricata lo stesso l'action del form, la pagina non viene fermata
dopo alert come vorrei io.
Come dovrei fare per annullare l'azione di submit se entro nell'if della
funzione?
grazie, Cristiano



 grazie, Cristiano
De nada
-- 
ZER0
~ .. six thousand and forty three days, nine hours, thirty seven minutes, eighteen seconds.
That is when the world ended.


sisi, era solo riscritto male. ora funziona., però...
solo se c'è una sola chiamata alla funzione. Ma se le chiamate sono di più
contemporaneamente, cioè se
onSubmit="obbligatorio('DataOff','Data
Offerta');obbligatorio('Cliente,'Ragione sociale') "
mettere un doppio return non funziona...
come dovrei fare?
Grazie, Cristiano

 come dovrei fare?
Orbene, prendiamola un po' larga.
Agli event-handler tu associ sempre una singola funzione. Anche se non te
ne rendi conto. Ovvero, il codice:
onSubmit="obbligatorio('DataOff','Data
Offerta');obbligatorio('Cliente,'Ragione sociale') "
E' esattamente il seguente:
oggettoform.onsubmit=function(){
	obbligatorio('DataOff','Data Offerta');
	obbligatorio('Cliente,'Ragione sociale') 
}
Il valore di ritorno di tale funzione (anonima, nei casi in cui il codice
venga specificato nel tag) blocca o meno l'esecuzione del comportamento di
default dell'evento relativo.
Come saprai, il valore di ritorno di una funzione è uno solo. Appena il
codice incontra un "return", restituisce il valore seguente ed esce
immediatamente dalla funzione. Ovvero:
function test(){
	alert("questo lo leggerai");
	return true;
	alert("questo invece no");
}
test();
Dopo questa panoramica, torniamo al tuo caso.
Supponendo che la funzione "obbligatorio" restituisca "true" nel caso in
cui il campo obbligatorio sia compilato, e "false" nel caso in cui non lo
sia, e tu vuoi che entrambi i campi obbligatori siano compilati, ti basterà
fare:
onsubmit="return obbligatorio('DataOff','Data Offerta') &&
obbligatorio('Cliente,'Ragione sociale')"
Potrebbe convenirti scrivere una funzione che ti fa il check di tali campi,
in modo da non dover buttare tutto nel codice HTML. Qualcosa tipo:
onsubmit="return checkFields()"
e in tale funzione far restituire "true" se le condizioni di validazione si
verificano tutte, o false in caso contrario.
-- 
ZER0
~ .. six thousand and forty four days, five hours, nine minutes, sixteen seconds.



mi rispondo da solo, anche se non so se questo sia il metodo giusto, vi
chiedo di darmi un parere:
ho fatto cosě:
onSubmit="return ferma(obbligatorio('DataOff','Data
Offerta'),obbligatorio('Cliente','Cliente'))">
 function obbligatorio(campo,nome)
 {
  var valore = document.getElementById(campo).value;
  var opzione= modulo.Cliente.options[modulo.Cliente.selectedIndex].value
  var lunghezza_opzione = !opzione ? 0 : opzione.length
  var lunghezza_valore = !valore ? 0 : valore.length
  if (lunghezza_valore==0 && lunghezza_opzione==0)  {
   alert('Il valore di ' + nome + ' č obbligatorio!') ;
   return( 1 );
  } else {
   return ( 0 );
  }
 }
 function ferma() {
  var args=ferma.arguments
  var stop = 0
  for (i=0; i<(args.length); i+=1)
  stop += args[i]
  if (stop>=1) {
   return false;
  }
 }

 Offerta'),obbligatorio('Cliente','Cliente'))">
va beh che grazie al meccanismo del trial and error dai trilobiti del
devoniano siamo giunti fino all'homo calcisticus dei nostri giorni, ma
quando Zer0 ti posta del codice raffinato (triplo Zer0, passatemi la
battuta :)) e ampiamente commentato, dimmi, che bisogno hai di digitare
lessemi a casaccio?
-- 
Having a dream is a gift. Make it real, or die tryin'.
If you really want to mail me, drop ME_A_LINE


ciò che dici è apparentemente vero. Io avevo scritto questo prima che il
server mi mostrasse quanto scritto da ZERO...
Cristiano

 lessemi a casaccio?
ROTFL !
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.