javascript - 通过事件访问 parentElement 属性
问题描述
我有一个名为 quote_div 的 div,它是 parentElement。它包含两个input type="number"
元素,一个<label>
我称为 r_lbl(变量名)的<label>
元素和另一个称为 r_position 的元素(所以这是一个 div 中的四个元素)。
我在 div 上放置了一个事件侦听器,这样当任何一个input type="number"
元素发生更改时,我都可以执行计算。
quote_div.addEventListener("change", calculateCost);
现在我正在尝试使用事件触发器 e(解析为 calculateCost(e) 函数)访问 div 上的 r_position 元素,但我得到一个未定义的错误,这很奇怪,因为我已经预定义了 r_position 的值。
console.log("li element position: " + e.target.parentElement.r_position.value);
难道就不能这样做吗?如果是这样,我有什么不明白的?
解决方案
根据您的 HTML 结构,您可以使用NonDocumentTypeChildNode.previousElementSibling
或NonDocumentTypeChildNode.nextElementSibling
:
const div = document.getElementById('quote_div');
div.addEventListener('change', (e) => {
const target = e.target;
const label = target.previousElementSibling;
console.log(label.innerText);
});
<div id="quote_div">
<label class="r_lbl" for="input1">Label 1</label>
<input id="input1" type="number" />
<label class="r_position" for="input2">Label 2</label>
<input id="input2" type="number" />
</div>
否则,您可以使用,或任何其他选择器Element.querySelector()
从父级<div>
使用:id
class
name
const div = document.getElementById('quote_div');
div.addEventListener('change', (e) => {
const div = e.target.parentElement;
const label1 = div.querySelector('.r_lbl');
const label2 = div.querySelector('.r_position');
console.log(label1.innerText, label2.innerText);
});
<div id="quote_div">
<label class="r_lbl" for="input1">Label 1</label>
<input id="input1" type="number" />
<label class="r_position" for="input2">Label 2</label>
<input id="input2" type="number" />
</div>
推荐阅读
- swift - 如何引用现有的 HStack、VStack 和 ZStack 实例?
- python - 对于 UNEVEN 结构化数据,使用 Pandas '比较和替换'值
- jmeter - 250 个用户在 jmeter 中达到了大约 60k 的总体请求
- mysql - Laravel sql 插入无法通过 DB::unprepared 正常工作
- clang - Clang-Format 缩进类成员
- python - 如何传递在模型方法 save() 中创建的对象本身
- javascript - 取消 .on 事件监听器/回调
- azure - Terraform 启用 VM Insights
- google-apps-script - 无法运行绑定到新空白文档的琐碎应用脚本 - 获取“此应用已被阻止”
- javascript - 每当有人发布/推文时通知您的代码