Programming languages use international numbering system, no commas is a point to be able to perform mathematical operations
Without running away from your code, just formatting the numbers to be able to do mathematical operations.
$(function(){
total = document.getElementById('total');
$(document.getElementsByName('choice')).bind('click',function(){
var valTotal = total.value;
valTotal = parseFloat(valTotal.replace(',','.'));
var valInput = (this.value);
valInput = parseFloat(valInput.replace(',','.'));
var novoTotal=0;
total.value = (this.checked) ? parseFloat(( valTotal + valInput )) : parseFloat(( valTotal - valInput )) ;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<form name="listForm" id="listForm">
<input type="checkbox" name="choice" value="2,55" />2,55<br/>
<input type="checkbox" name="choice" value="2,00" />2,00<br/>
<input type="text" size="6" name="total" id="total" value="100,00"/>
</form>
If you want the total to always have 2 decimal places in total.value
use the function toFixed
$(function(){
total = document.getElementById('total');
$(document.getElementsByName('choice')).bind('click',function(){
var valTotal = total.value;
valTotal = parseFloat(valTotal.replace(',','.'));
var valInput = (this.value);
valInput = parseFloat(valInput.replace(',','.'));
var novoTotal=0;
total.value = (this.checked) ? parseFloat(( valTotal + valInput )).toFixed(2) : parseFloat(( valTotal - valInput )).toFixed(2) ;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<form name="listForm" id="listForm">
<input type="checkbox" name="choice" value="2,55" />2,55<br/>
<input type="checkbox" name="choice" value="2,45" />2,45<br/>
<input type="checkbox" name="choice" value="2,50" />2,50<br/>
<input type="checkbox" name="choice" value="2,00" />2,00<br/>
<input type="text" size="4" name="total" id="total" value="100,00"/>
</form>
To return the total with comma.
$(function() {
total = document.getElementById('total');
$(document.getElementsByName('choice')).bind('click', function() {
var valTotal = total.value;
valTotal = parseFloat(valTotal.replace(',', '.'));
var valInput = (this.value);
valInput = parseFloat(valInput.replace(',', '.'));
var novoTotal = 0;
var value = (this.checked) ? parseFloat((valTotal + valInput)).toFixed(2) : parseFloat((valTotal - valInput)).toFixed(2);
total.value = value.replace('.', ',');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<form name="listForm" id="listForm">
<input type="checkbox" name="choice" value="2,55" />2,55<br/>
<input type="checkbox" name="choice" value="2,45" />2,45<br/>
<input type="checkbox" name="choice" value="2,50" />2,50<br/>
<input type="checkbox" name="choice" value="2,00" />2,00<br/>
<input type="text" size="4" name="total" id="total" value="100,00" />
</form>
DOCS:
replace
parseFloat
now that I’ve seen, that question already has an answer https://answall.com/questions/83280/somar-value-de-um-checkbox-instantly
– user60252
That other answer doesn’t solve my loop question
– Fabio Henrique