javascript - 多行自动相乘

标签 javascript

我是编码新手,因此我们将不胜感激。

我正在尝试对 2 个值进行自动乘法。基本上我的 table 看起来像 this 。乘法在第一行完美运行。如果我通过简单地复制此代码来创建另一行:

<tr>
   <td><input id="box1" type="text" oninput="calculate()" /></td>
   <td><input id="box2" type="text" oninput="calculate()" /></td>
   <td><input id="result" /></td>
</tr>

那么第二行就不起作用了。发生这种情况可能是因为第二行的 id 与第一行完全相同。但如果我更改id,脚本也将无法工作。您能告诉我如何修复它吗?

编辑:我将此脚本用于乘法目的:

function calculate() {
    var myBox1 = document.getElementById('box1').value; 
    var myBox2 = document.getElementById('box2').value;
    var result = document.getElementById('result'); 
    var myResult = myBox1 * myBox2;
    result.value = myResult;
    }

最佳答案

我会绑定(bind)一个input表的事件处理程序,它将捕获任何 input任何表格单元格的输入元素上的事件。在处理程序内event.target将引用事件起源的输入元素,您可以使用 DOM 导航属性/方法来查找同一行中的关联表格单元格。

也许有点像这样,使用 class而不是id :

document.getElementById("multiplier").addEventListener("input", function(e) {
  var row = e.target.parentNode.parentNode
  var val1 = row.querySelector(".valOne").value
  var val2 = row.querySelector(".valTwo").value
  row.querySelector(".result").value = val1 * val2
})
<table id="multiplier">
<tr>
   <td><input class="valOne" type="text" /></td>
   <td><input class="valTwo" type="text" /></td>
   <td><input class="result" /></td>
</tr>
<tr>
   <td><input class="valOne" type="text" /></td>
   <td><input class="valTwo" type="text" /></td>
   <td><input class="result" /></td>
</tr>
<tr>
   <td><input class="valOne" type="text" /></td>
   <td><input class="valTwo" type="text" /></td>
   <td><input class="result" /></td>
</tr>
</table>

进一步阅读:

最好使用e.target.closest("tr")而不是e.target.parentNode.parentNode ,但请注意 .closest() method IE 不支持,因此您需要使用 polyfill .

请注意,我显示的 JS 需要位于表格之后的脚本元素中(例如,位于结束 </body> 标记之前的正文末尾) ,或者您需要将其包装在文档加载或 DOMContentLoaded 处理程序中。

关于javascript - 多行自动相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118027/

相关文章:

javascript - 单击并拖动仅抓取对象的一部分

javascript - 从数据库获取数据并将其呈现到backbone.js中的表中

调用缺少的对象属性时,javascript 打印错误

javascript - React内联条件返回意外的 token ,预期的

javascript - 单击子 td 时如何获取 th ?

javascript - 使用javascript删除字符串之间的空格

javascript - 创建在单个服务器上运行的 meteor.js 应用程序的多个实例所需的主要步骤是什么?

javascript - objective-c 对象可以用作 Javascript 对象的原型(prototype)吗?

javascript查找两个嵌套数组之间的匹配变量

javascript - 从垂直滚动点开始视频,然后反向播放