Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou batendo cabeça pra fazer uma funcao de soma, eu tenho uma quantidade x de check box o numerod de check box q aparece na tela depende da quantidade de registros retornado do banco.
<input name="box" id="box<%=cont%>" type="checkbox" value="<%=rs("teste")%>" onclick="teste(box<%=cont%>.value);">
o que eu preciso e q sempre q um desses check box estiverem no estado checked, os seus valores vao sendo somados e no final diminuidos de um valor ja pre determinado, ou seja se eu tenho 4 check box na tela e cd um deles tem o valor respectivo de , 2 ,3 ,4 e 5 eu tenho q somar esses valores , total 14, e diminuir de outro valor , ex 14 - 10.
Alguem tem ideia de como fazer isso?
Eu tinha chegado + - nessa função, a minha ficou da seguinte forma:
function teste(cont){
var totinv = document.frm.tot.value;
for(i=0;i<=cont-1;i++){
if (document.frm.box[i].checked == true){
alert(i);
var teste2 = parseFloat(document.getElementById('amount'+i).value);
alert(teste2);
}
}
}
So um probleminha qnd eu uso o parseFloat ele arredonda o numero, sera q e por causa da formatação o numero esta da seguinte forma, Ex: 2,453.24 se dai ele me retorna so 2, se eu trocar a , por ponto sera q acerta, so q depois eu vou ter q destrocar qnd jogar na box, ne?
Dei uma olhada por ai no forum vo usar o replace(",",".").
Vlw a ajuda ai
Fiz o código abaixo que trabalha com valores monetários. Pelos testes que realizei, está funcionando bem no IE7.
<html>
<head>
<title></title>
<script type="text/javascript">
function somar() {
var objCheckBox = document.forms["form1"].elements["checkbox1"];
var iLoop;
//Pegando a parte antes da vírgula:
var subTotal1 = 0;
var RegExp1 = /^[\d][\d]+/g;
//Pegando a parte depois da vírgula:
var subTotal2 = 0;
var RegExp2 = /[\d]+[\d]$/g;
for (iLoop = 0; iLoop < objCheckBox.length; iLoop++) {
if (objCheckBox[iLoop].checked == true) {
//Verificando se existe vírgula no valor retornado:
if(objCheckBox[iLoop].value.indexOf(",",0) != -1) {
//Se houver, somar as partes antes e depois da vírgula, com o uso de ER:
subTotal1 += parseFloat(objCheckBox[iLoop].value.match(RegExp1));
subTotal2 += parseFloat(objCheckBox[iLoop].value.match(RegExp2));
//Posteriormente faremos o cálculo final dessa soma,
//pois a segunda parte poderá ser maior que 100;
} else {
//Se não houver, somar todo o valor a subTotal1:
subTotal1 += objCheckBox[iLoop].value;
}
}
}
//Calculando o valor final:
if(subTotal2 == 100) {
subTotal1 += 1;
subTotal2 = "00";
} else if (subTotal2 > 100) {
var resultado = Math.floor(subTotal2/100);
subTotal1 += resultado;
var resto = subTotal2-(100*resultado);
subTotal2 = resto;
}
document.form1.subtotal.value = subTotal1+ ","+subTotal2;
var preDet = parseFloat(document.form1.predet.value.match(RegExp1)+"."+document.form1.predet.value.match(RegExp2));
var Total = parseFloat(subTotal1+"."+subTotal2)-preDet;
Total = Total.toFixed(2);
Total = ""+Total;
Total = Total.replace(".",",");
document.form1.total.value = Total;
}
</script>
</head>
<body>
<form name="form1" method="post">
<input type="checkbox" name="checkbox1" value="2354,56"> 2354,56
<br><input type="checkbox" name="checkbox1" value="1350,11"> 1350,11
<br><input type="checkbox" name="checkbox1" value="5378,85"> 5378,85
<br><input type="checkbox" name="checkbox1" value="4477,15"> 4477,15
<br><input type="checkbox" name="checkbox1" value="7548,47"> 7548,47
<br>Sub-total: <input type="text" name="subtotal" value="">
<br>Valor pré-determinado: <input type="text" name="predet" value="3000,00">
<br><br>Total: <input type="text" name="total">
<br><br>
<input type="button" value=" Calcular " onClick="somar()">
</form>
</body>
</html>Vlw klonder, fico show! Vlw pela ajuda ia galera.
Bata a cabeça mais um pouco que você acha a solução.. IUAuHIAhiUAhA
Zoeira...
Crie um botão no final da sua página e nele chame a função abaixo:
function somaChk()
{
Abraços...