Newsgroup: it.comp.lang.javascript
Titolo: contare le checkbox

Ciao a tutti, mi trovo a dover affrontare un problema che non so risolvere.
Premetto che non conosco il javascript anche se credo sia questo il
linguaggio per risolvere il mio problema.
Praticamente ho una serie di 10 checkbox all'interno di un form html
(inserito in una pagina php)
In fondo al form vorrei inserire un contatore che segnala il numero di
checkbox selezionate
Io vorrei che ogni volta che si seleziona/deseleziona un checkbox il
contatore cambi automaticamente (senza bisogno di aggiornare la pagina).
E' possibile? E' il linguaggio giusto per farlo? Come si fa? Grazie,
Ken

 contatore cambi automaticamente (senza bisogno di aggiornare la pagina).
Detto Cont l'id di questo contatore (che sarà un tag qualsiasi, immagino)
potresti fare un qualcosa del tipo:
<script type="text/javascript">
 Conta=0;
</script>
<input type="checkbox" ...
onclick="document.getElementById('Cont').innerHTML=(this.checked?++Conta:--Conta)"
... />
(verifica che onclick venga scatenato *DOPO* il cambio dello stato della
checkbox, non ne sono sicurissimo e a memoria non ricordo. Altrimenti
cambia this.checked con !this.checked)
Alternativamente onclick puoi ciclarti le checkbox e contare quelle
checked, ma non mi pare il massimo.
Dato che qualcuno in questo newsgroup discute sulle variabili globali (eh
eh) al massimo scrivi 0 (zero) all'inizio del contatore e poi leggi il
valore...a me fa un po' schifo come soluzione, però...del tipo
<input type="checkbox" ...
onclick="document.getElementById('Cont').innerHTML=parseInt(document.getElementById('Cont').innerHTML)+ 
 (this.checked?1:-1)" ... />
-- 
"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.

 Come si fa?
In una tonnellata e mezzo di modi diversi. Uno può essere il seguente:
<script type="text/javascript">
	function updateLabel( sender ){
		var obj=document.getElementById("lblDayCount").firstChild;
 
		obj.nodeValue=parseInt(obj.nodeValue,10)+(sender.checked?1:-1);	
 
	}
</script>
<form>
	Schedula task per i seguenti giorni:<br />
	<input type="checkbox" onclick="updateLabel(this)" />Lunedì<br />
	<input type="checkbox" onclick="updateLabel(this)" />Martedì<br />
	<input type="checkbox" onclick="updateLabel(this)" />Mercoledì<br />
	<input type="checkbox" onclick="updateLabel(this)" />Giovedì<br />
	<input type="checkbox" onclick="updateLabel(this)" />Venerdì<br />
	<input type="checkbox" onclick="updateLabel(this)" />Sabato<br />
	<input type="checkbox" onclick="updateLabel(this)" />Domenica<br />
	<br />
	Totale giorni:<label id="lblDayCount">0</label>
</form>
-- 
~ "FINARMENTE LI SFRATTATI AVRANNO UN TETTO SULLA TESTA!
...però tirato ammodino, un tegolo pe' vorta.." (Il vernacoliere)

  (this.checked?1:-1)" ... />
Te mi vorresti mettere tutto 'sto popo' di codice "in line"? In attributo
di un checkbox? Che poi devi replicare per "n" checkbox? Oh, ma siamo
impazziti? :P
...Senza dimenticare l'uso di innerHTML: se si può fare la medesima cosa,
seguendo gli standard senza dover impazzire, sarebbe meglio farlo. Poi, per
carità, ci sono tantissimi casi in cui l'innerHTML risulta più utile (e
veloce, a livello di performance), ma non è questo il caso.


 "guidelines" per scrivere del codice decente :P
Coda di paglia? :-)Non solo discuti sulle var globali, ma anche in modo
*BEN INTENSO* !!! :-)))))
[CUT]
lo sapevo, lo sapeeeevooooooooo che non avresti resistito! :-) (lascia
stare, oggi non sto benissimo fisicamente e cosě anche la testa ne risente,
senza contare che settimana prossima sono finalmente in ferie e cosě si
avvicina, si avvicina...)
appro: ieri tutto il giorno a tirar giů vetri per quei c@zz@ di siti...era
fastweb! "la ringraziamo per la segnalazione, ci siamo accorti di un
problema generalizzato che abbiamo risolto" ... ... ... ... mia madre
direbbe, rivolta a me "ti ho tirato sů per 34 anni, come posso ammazzarti
adesso???", solo che io fastweb lo ho solo da un annetto...
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 adesso???", solo che io fastweb lo ho solo da un annetto...
Eheh... se non altro, hai risolto. Guarda il lato positivo. :)


Grazie ragazzi, mi siete stati di enorme aiuto!
Un saluto,
Ken

 </form>
Un unico appunto:
se nella riga finale
Totale giorni:<label id="lblDayCount">0</label>
al posto di 0 si inserisce qualsiasi altro numero, il calcolo verrà fatto
come base dal numero inserito.
Se però volessi che il numero rimanga sempre e comunque zero? (mantenendo
comunque la comunicazione con la cella modificandone altri parametri come
per esempio il colore di sfondo)
Grazie,
Ken

 Se però volessi che il numero rimanga sempre e comunque zero? 
In che senso, scusa? Non devi aggiornarla in base ai checkbox spuntati?


 In che senso, scusa? Non devi aggiornarla in base ai checkbox spuntati?
Si, quella era la prima parte del lavoro che mi serviva.
Ora avrei bisogno di effettuare un altro controllo che riconosca il numero
di checkbox selezionate e mi inserisca questo valore in una variabile senza
aggiornarmi il valore che c'è nella casella.
Sono un pò complicato, lo so...   ;-)
Ciao e grazie per la disponibilità!
Ken
PS: starò via 10 gg quindi scusatemi se non rispondo ai vostri post!

 Sono un pò complicato, lo so...   ;-)
Più che altro, dandoci informazioni unicamente a "spizzichi e bocconi", non
ci rendi semplice rispondere ai tuoi post, e ci fai lavorare il doppio.
Dacci il quadro generale della situazione.
