Newsgroup: it.comp.lang.javascript
Titolo: campo calcolato con ckeckbox

Salve a tutti...
sto cercando di fare una sorta di "carrello" con dei valori dinamici
ottenuti tramite click su delle check box.
Un campo input ha un valore di default che deve essere sommato ai
valori delle checkbox.
Ovviamente se una checkbox è checked = true  il valore andrà sommato
altrimenti eliminato sarà sotratto.
Questo script fa uan cosa simile solo che mi permette solo di sotrarre
anche quando la checkbox ha valore checked=true.
Come posso ottenere un risultato simile:
campo input_default = 100
valore checkbox = 30
se checkbox = true  input_default = 130
se checkbox da true passa a false input_default = 100
<script language="javascript">
<!--
function calcolo_ok(valore)
{
	var t = document.getElementById("totale");
	var tv = t.value;
	if(!isNum(tv)) return;
	var n = (this.checked)? +valore: -valore;
	t.value = parseFloat(tv) + n;
}
function isNum(arg)
{
	return !isNaN(parseFloat(arg));
}
//-->
</script>
<input type="text" name="T1" value="100 id="totale" size="5" >
<input type="checkbox" onclick="calcolo_ok('30','ok');"  id="ok<%=i%>"
name="id" >

 se checkbox da true passa a false input_default = 100
<script type="text/javascript">
	function addToTotal( sender ){
		var t = +sender.form.total.value,
			v = sender.value*(sender.checked?1:-1);
		sender.form.total.value = t+v;
	}
</script>
<form>
	<input type="text" value="100" name="total" />
	<input type="checkbox" value="30" onclick="addToTotal(this)"/>
</form>
Ovviamente sarebbe indicato mettere il campo text "readonly" oppure impostare
un altro elemento per visualizzare il totale (ad esempio una label).
Se gli elementi non stanno in una form, basta modificare i riferimenti di
conseguenza.
-- 
- Penso che sia meglio dividerci
- Buona idea
- SII, così possiamo fare più danno!!

funziona perfettamente grazie...
ma non capisco cosa intendi per il label...
forse un fieldset/label ???
ciao

 ma non capisco cosa intendi per il label...
Intendo dire che un campo testo č editabile, e quindi l'utente potrebbe
falsarne il risultato scrivendo lě dentro. Per questo ti ho suggerito,
eventualmente, di impostarlo readonly. O, appunto, di usare un altro elemento
al suo posto come una label. Questo č il codice modificato di conseguenza:
<script type="text/javascript">
	function addToTotal( sender ){
		var lbl = document.getElementById("total");
 
		var t = +lbl.firstChild.nodeValue,
			v = sender.value*(sender.checked?1:-1);
		lbl.firstChild.nodeValue = t+v;
	}
</script>
<form>
	<label id="total">100</label>
	<input type="checkbox" value="30" onclick="addToTotal(this)"/>
</form>
Ovviamente ammesso e concesso che il campo totale sia riepilogativo e non di
immissione.
-- 
- E.. lei č mestruata al momento?
- Ma scusi questo che c' entra??
- Si inchini alla scienza!

non conoscevo l'uso di label grazie...
ma devo chiederti come posso fare per visualizzare contemporaneamente
un altro campo che visualizza esclusivamente la somma dei valori
selezionati...
ho provato così ma non va...
<script >
        function addToTotal( sender ){
                var t = +sender.form.total.value,
                        v = sender.value*(sender.checked?1:-1);
                sender.form.total.value = t+v;
                sender.form.tot_suppl.value = v;
               } 
</script>

 selezionati...
Basta fare la stessa cosa impostando un campo con valore iniziale 0.
<script type="text/javascript">
	function addToTotal( sender ){
		var t = +sender.form.total.value,
			ts = +sender.form.tot_suppl.value,
			v = sender.value*(sender.checked?1:-1);
		sender.form.total.value = t+v;
		sender.form.tot_suppl.value = ts+v;
	}
</script>
-- 
- Penso che sia meglio dividerci
- Buona idea
- SII, cosě possiamo fare piů danno!!

perfetto...
grazie...

dovrei implementare questo script nuovamente...
<script type="text/javascript">
        function addToTotal( sender,id ){
                var t = +sender.form.total.value,
                        ts = +sender.form.tot_suppl.value,
                        v = sender.value*(sender.checked?1:-1);
                        sender.form.total.value = t+v;
                sender.form.tot_suppl.value = ts+v;
                document.getElementById('tot_send').value = t+v;
                var id_suppl =
document.getElementById('id_suppl').value+","
                document.getElementById('id_suppl').value = id_suppl+id
        }
</script>
ho un altro campo con id="id_suppl"
su checkbox = true aggiungo un valore/stringa al campo che ottengo da
id
su checkbox = false elimino dalla stringa il valore appena inserito.
l'obiettivo è potere ottenere  un campo cosi composto: 123,146,148,122
Purtroppo però si tratta di stringhe non di calcoli, quindi ho fatto
una cosa del genere :
<script type="text/javascript">
        function addToTotal( sender,id ){
                var t = +sender.form.total.value,
                        ts = +sender.form.tot_suppl.value,
                        v = sender.value*(sender.checked?1:-1);
                        c = id.id_suppl*(id.checked?1:-1);
                        sender.form.total.value = t+v;
                sender.form.tot_suppl.value = ts+v;
                document.getElementById('tot_send').value = t+v;
                var id_suppl =
document.getElementById('id_suppl').value+","
                document.getElementById('id_suppl').value = id_suppl+c
        } 
</script>
ma ovviamente va in errore.

 su checkbox = false elimino dalla stringa il valore appena inserito.
In tal caso ti conviene cambiare del tutto approccio, devi scorrerti tutti i
checkbox che rientrano nella formazione della stringa ogni volta che uno di
questi viene spuntato o meno, e rielaborare la stringa exnovo.
-- 
- Se tu un Dio?
- N...no.
- E allora MUORI!
- Ray, se qualcuno ti chiede se sei un Dio, tu devi rispondere di sì!