我有一个由forEach循环(通过数据库循环)创建的表。我正在尝试做的是通过每一行的数量x速率乘以来计算价格。我有一个JavaScript函数(BoqMath)来做这件事,但它只适用于第一行(第一个循环)。如何才能将其更改为对每行(所有循环)执行此数学运算?
表:
<% user.myrates.forEach(function(myrates){ %>
<tr>
<td><input type='text' class='form-control' value = "<%= myrates.boqUnit %>"></td>
<td><input type='text' class='form-control qty' oninput = "boqMath()"></td>
<td><div class="input-icon"><i>$</i><input type='text' class='form-control rate' oninput="boqMath()" value="<%= myrates.boqRate %>"></div></td>
<td><div class="input-icon"><i>$</i><input type='text' class='form-control price' oninput="boqMath()"></div></td>
<td><button type="submit" name="submit" class="btn btn-primary">Add</button></td>
</tr>
<% }); %>
这是函数:
function boqMath(){
var a = document.querySelector('.qty').value;
var b = document.querySelector('.rate').value;
var price = document.querySelector('.price');
price.value = (Number(a) * Number(b)).toLocaleString();
}
发布于 2018-06-26 08:35:49
将当前元素传递给boqMath()
。由此,您可以找到最接近的tr
,并获得该行的输入。
function boqMath(element) {
row = element.closest("tr");
var qty = row.querySelector(".qty").value;
var rate = row.querySelector(".rate").value;
var price = row.querySelector(".price");
price.value = (qty * rate).toLocaleString();
}
将oninput = "boqMath()">
更改为oninput="boqMath(this)"
https://stackoverflow.com/questions/51033377
复制相似问题