Newsgroup: it.comp.lang.javascript
Titolo: Abilitare submit al check

ciao a tutti vi descrivo il miio problema:
ho una pagina asp che crea in automatico una tabella con checkbox
name="p_delete" e campo "nomerecord"
al momento ho un tasto submit che invia la form a delete.asp che elimina il
record selezionato nella tabella generata. Il problema č che se non
seleziono nessun record mi da errore. Mi č stato chiesto di fare un
controllo sul "submit" che dovrebbe essere disabilitato di default e
abilitarsi non appena l'utente spunta una qualsiasi checkbox "p_delete",
oppure se ciň non fosse possibile lasciare il tasto abilitato, ma fare in
modo che compaia un alert in caso non abbia selezionato nulla.
Ho cercato nel forum ed ho trovato uno script simile, ma con i radio-button
sě/no. ho provato ad adattarlo, ma siccome di js capisco poco...
Qualcuno mi dice come fare, e se č possibile tutto ciň?
Grazie mille
-- 
   Daniele
--------------------------------------
   e-mail: togli "nondesiderolospam"
--------------------------------------

 modo che compaia un alert in caso non abbia selezionato nulla.
Per una maggiore compatibilita', ti direi di utilizzare il secondo 
caso. In quanto non tutti i browser supportano la modifica della 
proprieta' disabled a run-time.
Cmq il codice e' bene o male il seguente:
Per il disabled a run-time:
<script type="text/javascript">
	function checkStatus(){
		var f=document.forms[0],
			els=f.p_Delete,
			bChecked=false;
		for (var i=0;i<els.length;i++)
			bChecked|=els[i].checked;
 
		f.btnSubmit.disabled=!bChecked;
 
	}
</script>
<form>
	<input type="checkbox" name="p_Delete" onclick="checkStatus()"/>
	<input type="checkbox" name="p_Delete" onclick="checkStatus()"/>
	<input type="checkbox" name="p_Delete" onclick="checkStatus()"/>
	<input type="checkbox" name="p_Delete" onclick="checkStatus()"/>
	<input type="checkbox" name="p_Delete" onclick="checkStatus()"/>
 
	<input type="submit" name="btnSubmit" value="delete" 
disabled="true" />
 
</form>
Mentre, per il messaggio finale (piu' crossbrowser):
<script type="text/javascript">
	function validateForm(f){
		var els=f.p_Delete,
			bChecked=false;
		for (var i=0;i<els.length;i++)
			bChecked|=els[i].checked;
 
		if (!bChecked)
			alert("Nessun checkbox selezionato, impossibile 
proseguire");
		return bChecked;
 
	}
</script>
<form onsubmit="return validateForm(this)">
	<input type="checkbox" name="p_Delete" />
	<input type="checkbox" name="p_Delete" />
	<input type="checkbox" name="p_Delete" />
	<input type="checkbox" name="p_Delete" />
	<input type="checkbox" name="p_Delete" />
 
	<input type="submit" name="btnSubmit" value="delete" 
disabled="true" />
 
</form>
Dovrebbero andare. In caso, fammi sapere.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 disabled="true" />
P.S.
Ovviamente nell'ultimo esempio la proprieta' "disabled" del 
pulsante non esiste, m'e' rimasta nel copia e incolla dal precedente 
form ;)


ho seguito il tuo consiglio ed usato la seconda soluzione, c'era un
disabled="true" di troppo, ma l'ho eliminato.
ho lasciato lo / finale dove c'era. Sembra funzionare tutto, ma nel momento
in cui appare il msg di alert, premo ok e prosegue con l'invio dei dati. In
pratica mostra l'alert e quando viene premuto ok, anzichè restare nella
pagina prosegue dandomi errore.
Ciao e grazie per l'interessamento
Daniele

Credo che l'errore sia dovuto semplicemente a questo se non erro:
<form action="pagina.asp" method="post" onsubmit="return
validateForm(this);">
Ma se lascio solo <form onsubmit="return validateForm(this);"> come e dove
gli dico in che pagina deve andare?
Ciao

 in cui appare il msg di alert, premo ok e prosegue con l'invio dei dati.
Prova a sostituire il return bChecked con:
return bChecked?true:false;


ne approfitto per chiederti un'altra cosa. è possibile fare la stessa cosa,
ma al posto delle checkbox faccio la verifica sulla compilazione di un campo
<input type="file" name="p_file">?

ZERO, ti ringrazio tantissimo, il tuo script funziona a meraviglia. Nel mio
precedente 3D avevo chiesto se era possibile ottenere lo stesso effetto con
un campo "file". Ho provato a modificare lo script già presente di
ASP.Upload in questo modo:
<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);
    }
  }
// parte aggiunta
  else
  {
  alert("Nessun file contenente la notizia caricato, impossibile proseguire
con l'aggiunta/modifica della news");
  }
// fine parte aggiunta
  return true;
}
</script>
<form name="MyForm" action="pagina_action.asp?<% = PID %>" method="post"
enctype="multipart/form-data" onSubmit="return ShowProgress();">
Ora effettivamente riesco ad ottenere il messaggio di alert, ma come
succedeva prima prosegue nel processare la pagina.
Mi puoi dare una dritta? o mi consigli di aprire un nuovo 3D?
Grazie
    Daniele

 <input type="file" name="p_file">?
Si, l'unica cosa che non puoi fare e' cambiare il valore del suddetto 
campo, in quanto e' solo read-only.
Se hai un array la sintassi e' molto simile:
<script type="text/javascript">
	function checkStatus(f){
		var els=f.p_file,
			nIsSet=0;
		for (var i=0;i<els.length;i++)
			nIsSet+=els[i].value.length;
 
		if (!nIsSet){
			alert("nessun file selezionato");
			return false;
		}
		return true;
 
	}
</script>
Ora, non l'ho testato, ma dovrebbe andare. In pratica nella variabile 
nIsSet non fai altro che sommare la lunghezza della stringa del valore 
immesso nel campo p_file che sta ciclando.
Se alla fine del ciclo, risulta essere ancora a zero, significa che non 
e' stato immesso nemmeno un file.
In realta' anche a questo punto ti converrebbe cambiare sintassi del 
precedente controllo.
if (!bChecked){
	alert("bla bla");
	return false;
}
return true;
invece di avere un "return bChecked?true:false".


mmmm, ascolta io apro un nuovo 3d così non ti ossessiono più, almeno che tu
non voglia rispondere.
comunque la nuova richiesta non va inserita nella stessa pagina dei
checkbox, ma in un'altra
Ok se vuoi mi trovi nel nuovo 3D, così possono partecipare tutti :)
Comunque grazie per tutto l'aiuto che mi hai dato

 Comunque grazie per tutto l'aiuto che mi hai dato
De nada.



ok, ma posso richiamarlo in questo modo onSubmit="checkStatus(this); return
ShowProgress();">?
Se sì comunque comporta lo stesso problema di prima, processa comunque la
pagina
nuovamente... grazie di tutto

 pagina
Ma il problema di prima non l'hai risolto? Non hai letto i miei post?


ok, per evitare confusione postiamo solo sul 3D "Abilitare al caricamento di
un file"
I tuoi post li ho letti e seguiti tutti, infatti la pagina con le check
funziona egregiamente :-)
Poi forse ho fatto un po di confusione con l'apertura del nuovo 3D e
rispondendo contemporaneamente su questo
Scusami :-P

 Scusami :-P
Tranquillo, l'importante e' che si riesca a risolvere la situazione. :)
