0

对不起,如果这是一个愚蠢的问题。我是编程新手......我有 3 个来自文本输入的值。我希望将其中 2 个值存储到单独的数组中以供以后访问。最后我想在我的文档中显示这 3 个值的总和。我究竟做错了什么?

这是我的代码:

<script>

function displayCurrentBalance() {
  var initialBalance =  parseFloat(document.getElementById("initialBalance").value);

  var inAmounts=[0];
  var outAmounts = [0];
  inAmounts.push(document.getElementById("amountIn").value);
  outAmounts.push(document.getElementById("amountOut").value);

  var sumIn = (inAmounts.reduce(function(a, b) {
    return a + b[1];
  }, 0));
  var sumOut = (outAmounts.reduce(function(c, d) {
    return c + d[1];
  }, 0));

  var result = initialBalance + sumIn - sumOut;
  document.write(result);
};

displayCurrentBalance();

</script>
4

2 回答 2

0

您可能会在页面中的元素可用之前调用该函数。否则,脚本应位于页面中的元素下方。

您的主要问题是您如何使用reduce。从输入返回的值是字符串,因此在尝试添加它们之前将它们转换为数字(否则您将连接字符串,而不是添加数字)。您可能也应该验证这些值。

此外,reduce 是使用数组成员的值调用的,而不是数组本身(这是提供给回调的第四个参数,而不是第二个),所以:

var sumIn = (inAmounts.reduce(function(a, b) {
  return +a + +b;
}, 0));

修改另一个调用以类似地减少。我认为您不需要提供初始值,因为您将数组初始化为[0]. 或者,保留调用中的初始值并将数组初始化为[](即空数组)。

与其使用document.write来显示结果,不如将其写为只读输入元素的值,这样当用户修改其他输入中的值时,您可以在后续调用中更新它。

于 2013-10-29T01:52:36.240 回答
0
  1. document.write(result);甚至在您有机会输入值之前覆盖您的文档。使其在另一个输入框中显示一个值,或alert(result).

  2. 您可能应该附加displayCurrentBalanceonclick某个按钮的处理程序,例如<button onclick="displayCurrentBalance()">Calculate</button>.

  3. document.getElementById("amountIn").value类似的调用会给你一个字符串。您应该使用parseFloatparseInt将其转换为整数或浮点数。

于 2013-10-29T00:54:53.977 回答