繁体   English   中英

如何使用JavaScript对复选框的值求和

[英]How to sum values from a checkbox using javascript

嘿,我正在尝试更新此代码。 除了一件事,它几乎可以满足我的需要。 从技术上讲,有两个很好,但我主要关心的是一个。 当我勾选所需的框时,它会像预期的那样加起来,并在其应有的上面加上5%,但是它将答案放在“提交”按钮的值中。 我该如何阻止这种情况的发生? 第二(现在就不那么重要了)我如何才能使总价值以美元的金额返回(只有2个小数点),所以例如,返回0.924而不是返回0.924。 谢谢!

<body>
<h1> The Fruit Form</h1>
<form action="" name="form1" id="form1">
<input type="checkbox" id='fruit0' value=".59" >Apples ( .59)<br>
<input type="checkbox" id='fruit1' value=".49">Oranges (.49)<br>
<input type="checkbox" id='fruit2' value=".39">Bananas(.39)<br>

<input type="submit" onclick="UpdateCost()" id="totalcost" value="Submit">

</form>
<script type="text/javascript">
function UpdateCost() {
  var sum = 0;
  var fid, elem;
  for (i=0; i<3; i++) {
    fid = 'fruit'+i;
    elem = document.getElementById(fid);
    if (elem.checked == true) { sum += Number(elem.value); }
  }
  document.getElementById('totalcost').value = sum.toFixed(2)*1.05;
  alert("Your Total Is:" + totalcost.value);
  return false
} 
</script>
</body>

您的提交按钮的ID为totalcost ,您的函数获取的元素的ID为totalcost

document.getElementById('totalcost').value = sum.toFixed(2)*1.05;

因此,您可以通过不这样做来防止这种情况。

代替sum.toFixed(2)*1.05您应该执行(sum * 1.05).toFixed(2)如PSL所述。

相反,更新您的变量:

sum = (sum * 1.05).toFixed(2);

或创建一个新变量,例如total

var total = (sum * 1.05).toFixed(2);

或仅在输出值的地方处理它:

alert(  (sum * 1.05).toFixed(2)  );

额外:
由于您使用的是最多2个小数点的货币,因此我想提醒您一个事实,在JavaScript中0.1 + 0.2不是0.3!

避免这种情况的最好方法是,将所有数字乘以所需的精度,并根据输出的精度确定最终(子)结果。

因此:(52美分+ 18美分= 70美分)/ 100 = 0.7(在这里,您将使用toFixed使其变为0.70)。

只是一些代码注释:

如果将此函数传递给函数,则可以获取对表单的引用:

<input type="submit" onclick="UpdateCost(this)"  ...>

在函数中:

function UpdateCost(element) {
  var sum = 0;
  var fid, elem;

存储对表单的引用:

  var form = element.form;

  for (i=0; i<3; i++) {
    fid = 'fruit'+i;
    elem = document.getElementById(fid);

以上可以是:

    elem = form[fid];

    if (elem.checked == true) {
      sum += Number(elem.value);
    }

可以是:

    sum += elem.checked? +elem.value : 0;

一元+会将值转换为数字。

  }
  document.getElementById('totalcost').value = sum.toFixed(2)*1.05;

变成:

  form.totalcost.value = '$' + (sum * 1.05).toFixed(2);

HTH。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM