javascript - 使 querySelector 仅针对单击的此元素?

标签 javascript jquery html css

我有一个包含复选框的 div,我只想让 querySelector 定位此单击元素的子元素。截至目前,如果我单击下面的一个,它将触发单击上面的复选框。我该怎么做?

HTML

<div class="message-checkbox-container" style="height: 47px;" onclick="triggerCheck()">
     <input class="message-checkbox" type="checkbox">
</div>
<div class="message-checkbox-container" style="height: 47px;" onclick="triggerCheck()">
     <input class="message-checkbox" type="checkbox">
</div>

Javascript

function triggerCheck(){
document.querySelector('.message-checkbox').click();
}

最佳答案

使用 addEventListener 附加事件监听器相反 - 内联处理程序有 way too many problems值得在现代代码库中使用。要附加监听器,请选择 .message-checkbox-container元素,并且您可以在每个元素上使用闭包来引用其第一个子元素,即监听器内的输入:

for (const container of document.querySelectorAll('.message-checkbox-container')) {
  container.addEventListener('click', () => {
    container.children[0].click();
  });
}
<div class="message-checkbox-container" style="height: 47px;">container
     <input class="message-checkbox" type="checkbox">
</div>
<div class="message-checkbox-container" style="height: 47px;">container
     <input class="message-checkbox" type="checkbox">
</div>

并不是说你应该这样做,但你可以引用this在内联处理程序中获取对处理程序所附加元素的引用 - 您可以将其传递给函数并让函数调用 querySelector (或 .children[0] ):

function triggerCheck(elm) {
  elm.querySelector('.message-checkbox').click();
}
<div class="message-checkbox-container" style="height: 47px;" onclick="triggerCheck(this)">container
  <input class="message-checkbox" type="checkbox">
</div>
<div class="message-checkbox-container" style="height: 47px;" onclick="triggerCheck(this)">container
  <input class="message-checkbox" type="checkbox">
</div>

您可以考虑使用 <label>而不是<div> ,这样当单击标签时复选框将自动切换,无需 JavaScript:

.message-checkbox-container {
  display: block;
  cursor: pointer;
}
<label class="message-checkbox-container" style="height: 47px;">container
  <input class="message-checkbox" type="checkbox">
</label>
<label class="message-checkbox-container" style="height: 47px;">container
  <input class="message-checkbox" type="checkbox">
</label>

关于javascript - 使 querySelector 仅针对单击的此元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60807107/

相关文章:

jquery - live() 鼠标输入/悬停

javascript - 如何使用 jquery 比较两个文本框的值?

css - 如何使用 css 打破带有图像或颜色的链接的无序列表

javascript - 如何迭代对象数组并打印出其属性之一

php - 如何获取Facebook粉丝专页ID

javascript - 使用 nicedit 编辑动态创建的 div

html - 如何在JSP 中的两个变量之间插入一个空格?

javascript - 如何在单击时切换按钮颜色并在再次单击时将颜色更改回之前的颜色

javascript - react 俄罗斯方 block 。函数总是返回 false

javascript - 防止 Javascript 和 XSS 攻击