webForumDet fria alternativet

Checkbox?

14 svar · 398 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 058 inlägg
#1

Hej!
Jag undrar om det går att räkna ut värden men hjälp av javascript ifrån poster som jag markerat med ett kryss i en checkbox.

Exempel:

Postett | 10 | ▀
Posttvå | 24 | ▀
Posttre | 14 | ▀

Totalt:48
(Värdena sätts med en aspvariabel)

Defautvärdet är 10 + 24 + 14 = 48. Nu vill jag kunna kryssa i, låt säga Postett samt Posttre och få Totaltvärdet direkt uppdaterat. Skulle detta gå tror ni?

JojoxxMedlem sedan juni 20004 306 inlägg
#2

Re: Checkbox?

Jesper T skrev:

Skulle detta gå tror ni?

Nä det blir svårt...

<script>
function updateSum(obj){
	var sum=0;
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=='checkbox'&&obj[i].checked){ sum+=(obj[i].value*1); }
	}
	obj.summa.value=sum;
}
</script>
<form>
Postett | 10 | <input type="checkbox" value="10" onClick="updateSum(this.form)"><br>
Posttvå | 24 | <input type="checkbox" value="24" onClick="updateSum(this.form)"><br>
Posttre | 14 | <input type="checkbox" value="14" onClick="updateSum(this.form)"><br>
<input type="text" name="summa" value="0">
</form>

Nämen se... det gick... ;)

Jesper TMedlem sedan nov. 20017 058 inlägg
#3

Tack, va bussigt!
Hur sätter man defautvärdet på det totala då?(nu står det ju noll)
Och här kommer överkursen:
Om raderna innehåller många värden:
Posttre | 14 | 15 | 26 | 12 | 16 | 14 | 12 | ▀
Hur gör man dååååå dååå?

JojoxxMedlem sedan juni 20004 306 inlägg
#4

Du menar att vissa av checkboxarna kan vara förvalda? (Annars skall ju summan vara 0 från början). I så fall kan du lägga till onLoad="updateSum(document.formulärsnamnet);" i <body>.

Jesper TMedlem sedan nov. 20017 058 inlägg
#5

"length" är null eller inget objekt står det då. :(
Se föregående inlägg... :r Mycke jobb blir det.

JohnsenMedlem sedan juli 2000718 inlägg
#6

Om du med defaultvärdet menar värdeskolumnen/kolumnerna skall summeras oavsett om ckeckboxarna är ibockade eller ej,
får du göra en funktion som räknar samman checkboxarnas värde (utan att kolla om dom är checkade) efter att formuläret laddats.
Ex:

<script>
function updateSum(obj){
	var sum=0;
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=='checkbox'&&obj[i].checked){ sum+=(obj[i].value*1); }
	}
	obj.summa.value=sum;
}
</script>

<form>
Postett | 10 | <input type="checkbox" value="10" onClick="updateSum(this.form)"><br>
Posttvå | 24 | <input type="checkbox" value="24" onClick="updateSum(this.form)"><br>
Posttre | 14 | <input type="checkbox" value="14" onClick="updateSum(this.form)"><br>
<input type="text" name="summa" value="0">
</form>

<script>
	var sum=0;
	for(var i=0;i<document.forms[0].length;i++){
		if(document.forms[0][i].type=='checkbox'){
			sum+=(parseInt(document.forms[0][i].value));
		}
	}
	document.forms[0].summa.value=sum;
</script>

Om du vill ha flera värdeskolumner för posterna, kan du ju lägga värdena som en array i checkboxen och summera varje dela av arrayn för sig.
Typ:

Posttre | 14 | 15 | 26 | 12 | <input type="checkbox" value="14,15,26,12" onClick="nyFunktion()">
Jesper TMedlem sedan nov. 20017 058 inlägg
#7

Tack för tipsen!

Jesper TMedlem sedan nov. 20017 058 inlägg
#8

En, liten fråga. När jag klickat i en box och klickar ur den så står det ju noll(0). Går det att sätta det värdet till 48 så fort som ingen är ikryssad?

@ndersMedlem sedan juni 200026 914 inlägg
#9
if (sum==0) sum=48;
obj.summa.value=sum;

Eller missförstår jag?

Mvh,

Jesper TMedlem sedan nov. 20017 058 inlägg
#10

Jag hajjar inte :(
Och 48 är det inte alltid ju.
Jag är riktigt kass på detta.

@ndersMedlem sedan juni 200026 914 inlägg
#11

Det var ju 48 du bad om? Var kommer värdet ifrån då? En asp-variabel? Skriv ut den till javascriptet då.

function updateSum(obj){
	var sum=0;
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=='checkbox'&&obj[i].checked){ sum+=(obj[i].value*1); }
	}
	[b]if (sum==0) sum=<%=aspvariabel%>;[/b]
	obj.summa.value=sum;
}
Jesper TMedlem sedan nov. 20017 058 inlägg
#12

Nej, nej, nej. Den kommer ifrån värdet/värdena i checkboxarna ser det ut så här är summan 59:

Postett | 10 | <input type="checkbox" value="10" onClick="updateSum(this.form)"><br>
Posttvå | 24 | <input type="checkbox" value="24" onClick="updateSum(this.form)"><br>
Posttre | 14 | <input type="checkbox" value="14" onClick="updateSum(this.form)"><br>
Postfyra | 11 | <input type="checkbox" value="11" onClick="updateSum(this.form)"><br>
@ndersMedlem sedan juni 200026 914 inlägg
#13

Om ingen är markerad ska det vara summan av alla checkboxars värde? Eller?

<script>
function updateSum(obj){
	var sum=0;
	var zerovalue=0;
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=='checkbox'){ zerovalue+=(obj[i].value*1); }
		if(obj[i].type=='checkbox'&&obj[i].checked){ sum+=(obj[i].value*1); }
	}
	if (sum==0) sum=zerovalue;
	obj.summa.value=sum;
}
</script>

Red: förkortade funktionen en aning

Jesper TMedlem sedan nov. 20017 058 inlägg
#14

Ja!!!!! Tack!

JohnsenMedlem sedan juli 2000718 inlägg
#15

Hmmm, vad händer om en post är negativ:

Postett | 10 |
Posttvå | 24 |
Posttre |-10 |

och ettan och trean är bockade. Med @nders skript skulle resultatet bli 24!

Jag skulle gjort så här: (bara för att reta @nders ;) )

function updateSum(obj){
	var sum=0, def=0, isChecked=0
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=='checkbox'){def+=(obj[i].value*1);}
		if(obj[i].type=='checkbox'&&obj[i].checked){sum+=(obj[i].value*1); isChecked=1}
	}
	(isChecked==1)? obj.summa.value=sum : obj.summa.value=def;
}
Genererad på 397 ms · cache AV · v20260730165559-full.f96bc7eb