【问题标题】:Using JS to calculate elements in a PHP while loop使用 JS 计算 PHP while 循环中的元素
【发布时间】:2018-10-30 05:14:52
【问题描述】:

我有 2 个 <p> 标记和一个输入字段,包装在一个 while 循环中

<p id="price"></p>
<input  id="quantity"  oninput="calculate(<?php echo $cprice; ?>)" type="text" name="quantity">
<p id="total"></p>

我想用 JavaScript 来进行算术运算。

我想将价格和数量相乘并显示总结果。如果没有 while 循环,它可以工作,但使用 while 循环,它只会更新第一个字段。

function calculate(price) {
        var quantity = document.getElementById('quantity').value;
        var result = document.getElementById('total');  
        var myResult = price * quantity;
        document.getElementById('total').innerHTML = myResult;
}

不知道怎么用js动态更新total标签

【问题讨论】:

  • 你不能有重复的 ID - 使用一个类
  • while循环向我们展示你的标记和代码
  • @u_mulder 很明显

标签: javascript php


【解决方案1】:

您需要将 ID 更改为 class,因为 ID 必须是唯一的。

查看假设价格始终存在的示例

我选择不使用 nextElement,因为没有它您可以轻松地将其他内容添加到 html 中

我还让代码不显眼,而不是使用内联处理程序

document.querySelectorAll(".quantity").forEach(function() {
  this.oninput = function() {
    var q = document.querySelectorAll(".quantity"),
      p = document.querySelectorAll(".price"),
      total = 0;
    q.forEach(function(qt, index) {
      var price = +p[index].innerText,
        quantity = +qt.value;
      if (!isNaN(quantity)) total += price * quantity;
    })
    document.getElementById('total').innerHTML = total;
  }
})
<p class="price">1</p>
<input class="quantity" type="text" name="quantity">
<p class="price">2</p>
<input class="quantity" type="text" name="quantity">
<p class="price">3</p>
<input class="quantity" type="text" name="quantity"><br/>
Total:<p id="total"></p>

【讨论】:

  • 使用您的代码,总共只有 1 个。很抱歉我没有更好地解释它,但我希望每个价格和数量都有自己的总和
【解决方案2】:

ID 必须是唯一的。如果有重复,document.getElementById 将返回第一个。

不要使用 ID,而是使用 DOM 导航方法。你可以传入this来获取输入元素的引用,然后在它后面找到输出元素。

function calculate(price, input) {
  var quantity = input.value;
  var result = input.nextElementSibling;
  var myResult = price * quantity;
  result.innerHTML = myResult;
}
<p class="price">Price = 30</p>
<input class="quantity" oninput="calculate(30, this)" type="text" name="quantity">
<p class="total"></p>

<p class="price">Price = 45</p>
<input class="quantity" oninput="calculate(45, this)" type="text" name="quantity">
<p class="total"></p>

【讨论】:

  • 这段代码在没有样式的情况下工作,当我将它添加到代码的样式版本时,它会在不同的地方显示结果。也许是因为我不懂nextElementSibling
  • 它返回下一个元素,它是同一个父元素的子元素。如果您在两者之间添加其他元素或包装它们,则需要进行更复杂的导航以匹配它。 jQuery 使用其.closest().find() 方法使这种事情变得更容易。
  • 中间只有 1 个元素,我应该如何导航?
  • 真正的程序员如果不确定某些东西是如何工作的,就会阅读文档。 developer.mozilla.org/en-US/docs/Web/API/…
  • input.nextElementSibling.nextElementSibling
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2012-03-23
  • 2019-04-07
  • 1970-01-01
  • 2017-07-05
  • 2021-12-19
相关资源
最近更新 更多