javascript - 如何从事件目标最接近(名称)中获取元素

标签 javascript html google-apps-script

我不知道如何使用事件目标 closest([name="..."])据我了解closest()应该在我更改输入字段中的值后获取元素进行计算,但我得到的元素是null

function calculate(e) {
    if (e.target.name == 'qty') {
      var elemPrice = e.target.closest('[name="price"]') //***
      var elemAmount = e.target.closest('[name="amount"]') //***
      console.log(elemPrice)
      console.log(elemAmount)
      elemAmount.value = elemPrice.value * e.target.value
    }
}
document.addEventListener('DOMContentLoaded',function(){
    document.getElementsByName('qty').forEach(t => { t.addEventListener('change',calculate) })
})
<table>
      <tbody>
                <tr class="uk-hidden">
                    <td>1</td>
                    <td><input name="price"></td>
                    <td><input name="qty"></td>
                    <td><input name="amount"></td>
                </tr>
                <tr class="uk-hidden">
                    <td>2</td>
                    <td><input name="price"></td>
                    <td><input name="qty"></td>
                    <td><input name="amount"></td>
                </tr>
                <tr class="uk-hidden">
                    <td>3</td>
                    <td><input name="price"></td>
                    <td><input name="qty"></td>
                    <td><input name="amount"></td>
                </tr>
      </tbody>
</table>

我试过了
   ...
      var elemPrice = e.target.parentElement.previousElementSibling.lastElementChild  //***
      var elemAmount = e.target.parentElement.nextElementSibling.lastElementChild  //***
   ...
但我想做 closest有没有办法做到这一点 ?
无论如何提前谢谢你

最佳答案

阅读文档总是一个好主意。如果我们看 https://developer.mozilla.org/en-US/docs/Web/API/Element/closest它说:

The closest() method traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null.


所以它不会做你假设的事情:它只检查从你的元素到文档根的路径。你想要的是找到最近的<tr> ,然后找到name=price该元素内的元素:
e.target.closest(`tr`).querySelector(`[name=price]`)

关于javascript - 如何从事件目标最接近(名称)中获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63046477/

相关文章:

javascript - 在 node.js 中获取应用引擎的当前实例 ID

javascript - 对象数组中的递归循环

javascript - 如何在不重新加载页面的情况下动态地将表单字段值附加到变量

javascript - 无法在 Chrome 扩展中启用 Chrome 架

html - 如何为多个设备显示图像?

javascript - 如果另一个单元格不为空,如何为单元格设置代码 Google SpreadSheet

google-apps-script - 是否可以在另一个面板中嵌入使用 GUI 构建器构建的 GUI?

javascript - 将 Flash 消息与 Angular Routing 结合使用

javascript - 如何根据其他变量设置一个变量

html - 下拉菜单中工具提示的CSS