当页面加载循环开始并且java脚本函数也在循环的第一行中起作用但是在第二循环中它不起作用乘法不起作用你可以在pic中看到(单位费率*数量=总价格)
foreach($db->getRecordSet($sqlTrRecord) as $row){$counter += 1; ?>
<tr id="temTr" class="banktblhd">
<td width="5"> <?php echo($counter); ?> </td>
<td class="w10"> <input type="text" name="item_code" id="item_code" class="form-control" value="<?php echo($row['item_code']); ?>" readonly /></td>
<td class="w20"><input type="text" class="form-control" name="item_name" id="item_name" value="<?php echo($row['item_name']); ?>" readonly /> </td>
<td class="w10"><input type="text" class="form-control" name="description" id="description" value="<?php echo($row['description']); ?>" readonly /></td>
<td class="w10"><input type="text" class="form-control" name="availableQty" id="availableQty" value="<?php echo($row['quantity']); ?>" readonly /></td>
<td class="w10"><input type="text" class="form-control" name="unit_rate" id="unit_rate" onKeyUp="total()" value="<?php echo($row['unit_rate']); ?>" readonly /></td>
<td class="w10">
<input type="number" class="form-control" name="quantity" id="quantity" onKeyUp="total()" autocomplete="off" /> </td>
<td class="w10"><input type="text" class="form-control" name="total_price" id="total_price" value="" />
</td>
</tr>
--------------------------
function total(){
var unitRate= document.getElementById("unit_rate");
var qty = document.getElementById("quantity");
var total = unitRate.value * qty.value;
document.getElementById("total_price").value = total;
}
答案 0 :(得分:2)
您不能为多个元素提供相同的ID。这是无效的HTML。如果你这样做,getElementById
通常会返回第一个(但它可以做任何事情,包括不返回任何内容,因为它再次无效)。
在您的情况下,完成此项工作所需的最小更改是:
删除行中的所有id
,您不需要它们。将name
保留在input
s。
将this
传递给您total
的任何地方,以便它知道keyup
发生在哪个元素上,例如:
<input type="number" class="form-control" name="quantity" onKeyUp="total(this)" autocomplete="off" />
<!-- --------------------------------------------------------------------^^^^ -->
更新total
以将其作为参数接收,并通过遍历DOM查找同一行中的各种输入:
function total(element) {
var row = element.closest("tr");
var unitRate = row.querySelector("input[name=unit_rate]");
var qty = row.querySelector("input[name=quantity]");
// (Note you're relying on implicit coercion from string to number here)
var total = unitRate.value * qty.value;
row.querySelector("input[name=total_price]").value = total;
}
通过查找包含事件发生的元素的行,然后使用带有CSS选择器的Element#querySelector
来查找那行中的各种input
s 。 / p>
请注意,它使用Element#closest
,这是相当新的。为避免使用它,您可以替换
var row = element.closest("tr");
与
var row = element;
while (row && row.tagName !== "TR") {
row = row.parentNode;
}
几个旁注: