javascript - javascript中的函数仅适用于其中一行
问题描述
我有这个有 2 列和 2 行的小桌子。我在“Fuel”中手动输入一个数字,并且应该在“Double_Fuel”列上显示双倍。不幸的是,它仅将我的功能应用于第一行。在第二行它不起作用。有人知道为什么吗?提前致谢
<html>
<body>
<style> table, th, td {border: 1px solid black;} </style>
<! --COMIENZO TABLA -->
<table id="MyTable" class="egt">
<! --PRIMERA LINEA -->
<tr>
<th>Fuel</th>
<th>Double_Fuel</th>
</tr>
<! --SEGUNDA LINEA -->
<tr>
<td>
<input type="number" id="fuel">
</td>
<td>
<input type="number" ID="fuel2" >
</td>
</tr>
<! --TERCERA LINEA -->
<tr>
<td>
<input type="number" id="fuel">
</td>
<td>
<input type="number" ID="fuel2" >
</td>
</tr>
</table>
<script>
var fuel = document.getElementById('fuel');
var fuel2 = document.getElementById('fuel2');
function calculate(){
fuel2.value = Number(fuel.value)*2;
}
var inputElement = document.getElementById('fuel');
inputElement.addEventListener('change', calculate);
</script>
</body>
</html>
解决方案
ids 在页面上应该是唯一的,因此getElementById
只返回一个元素(如果没有找到匹配的 id,则返回 null)但是您可以借助数据集属性并使用类而不是 id 来执行计算功能,如下所示:
function calculate() {
const result = document.querySelector(`#${this.dataset.result}`);
result.value = Number(this.value) * 2;
}
const inputElements = document.querySelectorAll('.fuel');
inputElements.forEach(input => input.addEventListener('change', calculate));
table,
th,
td {
border: 1px solid black;
}
<! --COMIENZO TABLA -->
<table id="MyTable" class="egt">
<! --PRIMERA LINEA -->
<tr>
<th>Fuel</th>
<th>Double_Fuel</th>
</tr>
<! --SEGUNDA LINEA -->
<tr>
<td>
<input type="number" class="fuel" data-result="fuel1">
</td>
<td>
<input type="number" id="fuel1">
</td>
</tr>
<! --TERCERA LINEA -->
<tr>
<td>
<input type="number" class="fuel" data-result="fuel2">
</td>
<td>
<input type="number" id="fuel2">
</td>
</tr>
</table>
推荐阅读
- php - 如果表单名称=数组,如何将 $_POST 数据存储到会话变量中?
- python - Python 集合比较是运算符
- typescript - 如果不是,则将值包装到数组并在 TypeScript 中输出正确类型的函数
- python - python boto3文本到语音'polly'
- typescript - 对象属性在解构后丢失 null
- python - Python无法定位对象属性
- python - 合并一列的值并将另一列转换为多列
- javascript - 将值设置为 jquery 小部件滑块
- kubernetes - K8s init 容器自行重启
- discord - 如何通过命令启用慢模式?