javascript - 获取具有相同父 div 的所有文本框的值并显示总和

标签 javascript

我有两个类名相同的 div,每个 div 包含 5 个输入字段,其中 4 个输入字段,第五个用于显示总和。 有人可以帮我编写一个触发 onblur() 的 JavaScript,但仅从该 div 的输入字段中获取金额并在其总计中显示总和。 问题是所有输入字段都具有相同的类名,甚至两个 div 都具有相同的名称,所以我将如何区分它们。 我不能给他们 ID,因为我是从通用循环生成它的,该循环从数据库获取数据并根据数据库的结果数自行执行。

<div class="feerow">
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="8" data-clsec="345" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="9" data-clsec="345" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="10" data-clsec="345" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="11" data-clsec="345" />
    </div>
    <div class="feetext">
        <input class="amount" type="text" id="total" readonly="" disabled="disabled" />
    </div>
</div>
<div class="feerow">
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="8" data-clsec="346" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="9" data-clsec="346" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="10" data-clsec="346" />
    </div>
    <div class="feetext">
        <input class="amount"  type="text" data-feetype="11" data-clsec="346" />
    </div>
    <div class="feetext">
        <input class="amount" type="text" id="total" readonly="" disabled="disabled" />
    </div>
</div>

最佳答案

这是一个使用普通 javascript 的示例。我懒得在多个浏览器中测试它,但它似乎在 Chrome 中运行良好。基本上,每当有人输入内容时(您可以使用 input 事件而不是 blur 事件以获得更直接的结果)它会将行中的所有数字相加并显示在总数。我添加了一些代码将结果格式化为美元,因为它看起来像是在处理金钱。

function sumRow(row) {
  var fees = row.querySelectorAll("input:not(:disabled)"),
    total = Array.prototype.reduce.call(fees, function(sum, input) {
      return sum + (parseFloat(input.value) || 0);
    }, 0),
    formatted;

  if (total) {
    formatted = "$" + Math.round(100 * total);
    formatted = formatted.substr(0, formatted.length - 2) + "." + formatted.substr(-2);
  } else {
    formatted = "$0.00";
  }

  row.querySelector("input:disabled").value = formatted;
}

document.addEventListener("input", function(e) {
  sumRow(e.target.parentElement.parentElement);
});

window.addEventListener("load", function onLoad() {
  window.removeEventListener(onLoad);
  Array.prototype.forEach.call(document.querySelectorAll(".feerow"), sumRow);
});
<div class="feerow">
  <div class="feetext">
    <input class="amount" type="text" data-feetype="8" data-clsec="345" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="9" data-clsec="345" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="10" data-clsec="345" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="11" data-clsec="345" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" id="total" readonly="" disabled="disabled" />
  </div>
</div>
<div class="feerow">
  <div class="feetext">
    <input class="amount" type="text" data-feetype="8" data-clsec="346" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="9" data-clsec="346" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="10" data-clsec="346" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" data-feetype="11" data-clsec="346" />
  </div>
  <div class="feetext">
    <input class="amount" type="text" id="total" readonly="" disabled="disabled" />
  </div>
</div>

关于javascript - 获取具有相同父 div 的所有文本框的值并显示总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736601/

相关文章:

javascript - 在控制台 VS 代码中显示所有输出

javascript - 如何在 Chrome 中通过 window.open 打开多个电子邮件客户端窗口?

JavaScript:解码 PHP json_encode 响应

javascript - 如何访问和使用 do while 循环的返回值?

javascript - Javascript 中的动态表和事件委托(delegate)

JavaScript 将具有相同 id 的对象转换为对象数组

javascript - TypeError : this. attr 不是类悬停上的函数

javascript - 添加此 Twitter 关注按钮自定义

javascript - 为什么 'new Date() * 1' 会产生 Javascript 时间戳?

javascript - Shiny 和 Javascript - 未捕获的 ReferenceError : TRUE is not defined