输出数量翻倍

output number is doubled

本文关键字:输出      更新时间:2023-09-26

我有这样的代码:

<script type="text/javascript">
function showTotal(form, totalEl)
{
  var el, els = form.elements;
  var sum = 0;
  for (var i=0, num=els.length; i<num; ++i){
    el = els[i];
    if ('text' == el.type){ //&& /SumB/.test(el.name)
      sum += +el.value;
    }
    form.elements[totalEl].value = sum;
  }
}
</script>

如果我使用一个警报,我得到正确的输出,但它填充错误的值到"totalEl"你可以测试这个(固定)这是复选框和文本框的第一个块!

如果你尝试

<script type="text/javascript">
function showTotal(form, totalEl)
{
  var el, els = form.elements;
  var sum = 0;
  for (var i=0, num=els.length; i<num; ++i){
    el = els[i];
    // Do not include totalEl
    if ('text' == el.type && el != form.elements[totalEl]) {
      sum += +el.value;
    }
  }
  form.elements[totalEl].value = sum;
}
</script>

如果totalEl是形式的元素,则form.elements[totalEl].value = sum;行必须在for循环之外,否则totalEl本身的值将包含在最后的计算中,导致双重求和。

它将在"sum"文本元素中添加值,以及它现在的书写方式。使用一个类,或者从相加后的新总数中减去当前总数,或者在循环之前将元素归零。

正如另一个答案所提到的,设置"sum"字段的部分也不应该在循环中。