webForumDet fria alternativet
Logga in / Bli medlem

Checkbox?

JavaScript

14 svar · 398 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Trådstart#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?

Medlem sedan juni 20004 308 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... ;)

Medlem sedan nov. 20017 144 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ååå?

Medlem sedan juni 20004 308 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>.

Medlem sedan nov. 20017 144 inlägg
#5

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

Medlem sedan juli 2000836 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()">
Medlem sedan nov. 20017 144 inlägg
#7

Tack för tipsen!

Medlem sedan nov. 20017 144 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?

Medlem sedan juni 200032 967 inlägg
#9
if (sum==0) sum=48;
obj.summa.value=sum;

Eller missförstår jag?

Mvh,

Medlem sedan nov. 20017 144 inlägg
#10

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

Medlem sedan juni 200032 967 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;
}
Medlem sedan nov. 20017 144 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>
Medlem sedan juni 200032 967 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

Medlem sedan nov. 20017 144 inlägg
#14

Ja!!!!! Tack!

Medlem sedan juli 2000836 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;
}
272 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)