Newsgroup: it.comp.lang.javascript
Titolo: Abilitazione al caricamento di un file

Ciao a tutti, apro un nuovo 3D, ma il problema è simile al precedente:
pagina pippo.asp con una form "MyForm"
tramite la compilazione di alcuni campi andrò ad inserire valori in un DB e
tramite i campi p_file e p_file2 caricherò dei file, ma mentre il campo
p_file2 è facoltativo il campo p_file è obbligatorio.
Il problema che sorge è: se il campo p_file è vuoto mi da errore nella
pagina successiva, quindi conviene creare un alert che mi obbliga a caricare
un file.
Per il caricamento del file io utilizzo ASP.Upload e nella pagina devo
inserire questo codice js che mi pare faccia mostrare una barra di
caricamento in base al browser:
<script language="JavaScript">
function ShowProgress()
{
  strAppVersion = navigator.appVersion;
  if (document.MyForm.p_file.value != "" || document.MyForm.p_file2.value !=
"" )
  {
    if (strAppVersion.indexOf('MSIE') != -1 &&
strAppVersion.substr(strAppVersion.indexOf('MSIE')+5,1) > 4)
    {
      winstyle = "dialogWidth=375px; dialogHeight:180px; center:yes";
      window.showModelessDialog('<% = barref %>&b=IE',null,winstyle);
    }
    else
    {
      window.open('<% = barref %>&b=NN','','width=370,height=165', true);
    }
  }
  return true;
}
</script>
 <form name="MyForm" action="pippo_action.asp?<% = PID %>" method="post"
enctype="multipart/form-data" onSubmit="return ShowProgress();">
come aggiungo la parte che mi mostra l'alert?
ringrazio anticipatamente tutti coloro che si interesseranno al problema
-- 
   Daniele

 </script>
Nella funzione non mi pare di aver visto alcun return false; il che mi 
fa supporre che gli interessi solo venir invocata.
In tal caso, prova cosi':
<form name="MyForm" action="pippo_action.asp?<% = PID %>" 
method="post" enctype="multipart/form-data" onSubmit="return 
validateForm(this)">
Dove :
function validateForm(f){
	if (f.p_file.value==""){
		alert("Il campo file #1 e' obbligatorio");
		return false;
	}
	return ShowProgress();
}
In questo modo non "sporchi" il codice della funzione ShowProgress, e 
suddividi logicamente i blocchi di azione e controlli da fare.
Prova un po' e fammi sapere.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

se non ho capito male ho fatto cosě:
<script language="JavaScript">
function validateForm(f)
{
[cut]
}
return ShowProgress();
}
</script>
<script language="JavaScript">
function ShowProgress()
{
    [cut]
}
</script>
sinceramente avevo provato pure senza separare i due script, ma il risultato
č uguale:
mostra l'altert, ma continua a processare la pagina.
Grazie ancora

 Grazie ancora
Allora, partiamo dalle basi, evidentemente c'e' qualcosa o che copi 
male nello script, o che sfugge al discorso.
Se abbiamo un form (un form qualunque che punta a qualunque pagina), e 
vogliamo bloccarne la propagazione, o condizionarla ad un evento, si 
deve agire sull'evento onsubmit.
L'evento onsubmit viene scatenato nel momento in cui si submitta la 
form, e' esattamente lo step prima dell'invio fisico dei dati al 
server.
Essendo un event-handler, ha un valore di ritorno. Se come valore gli 
impostiamo "true", esso prosegue con la propagazione; mentre con 
"false" la blocca.
Esempio:
<form method="get" onsubmit="return false">
	<input type="submit" name="btnSubmit" value="click" />
</form>
Questo form non verra' mai processato.
Mentre:
<form method="get" onsubmit="return true">
	<input type="submit" name="btnSubmit" value="click" />
</form>
e' equivalente a omettere l'onsubmit, in quanto verra' sempre 
processato.
Ergo, se abbiamo una funzione, possiamo giocare con questi elementi:
function validateForm(){
	if (condizione)
		return false;
}	return true;
In pratica se la condizione e' soddisfatta, restituisce false (e quindi 
non passa all'istruzione successiva in quanto siamo usciti dalla 
funzione), mentre nell'altro caso restituisce true.
Cosi' facendo:
<form method="get" onsubmit="return validateForm()" >
	<input type="submit" name="btnSubmit" value="click" />
</form>
Realizziamo un submit condizionale, in quanto il "return" dell'event-
handler assume valore di true o false dipendentemente dalla funzione.
L'errore piu' comune che si ha quando "la form viene processata 
comunque", e' dimenticarsi il return:
<form method="get" onsubmit="validateForm()" >
	<input type="submit" name="btnSubmit" value="click" />
</form>
In questo caso la funzione viene si' invocata, ma non passa il valore 
di ritorno all'event-handler.
Ma, dal codice che hai postato, non mi pare il tuo caso.
Evidentemente c'e' qualcos'altro che non hai scritto, oppure vi e' un 
errore javascript all'interno della tua pagina non direttamente 
collegato a questo.
Non avendo sottomano l'intero contesto, non posso saperlo; ma tu adesso 
che sai qual'e' la logica che ci sta dietro l'onsubmit puoi capire cosa 
c'e' che non va'.


ok ora funziona.
Grazie mille, per tutto check e text.