javascript - 我不明白为什么计数器在一个按钮上起作用而在另一个按钮上不起作用

标签 javascript jquery html css

我对 Javascript 和 JQuery 很陌生,我似乎无法弄清楚为什么一个按钮的计数器会递增,但相同的代码对其他按钮不起作用。任何帮助将不胜感激。谢谢!

// JAVASCRIPT/JQUERY (to increment by 1)
let addRoom = document.querySelector(".addRoom");
let subtractRoom = document.querySelector(".subtractRoom");
let input = document.querySelector(".roomsAmmount");

addRoom.addEventListener('click', () => {
  input.value = parseInt(input.value) + 1;
});

subtractRoom.addEventListener('click', () => {
  input.value = parseInt(input.value) - 1;
});
/*.addRoom,.subtractRoom{position:absolute;font-size:1.3em;width:50%;height:45px;z-index:1;display:flex}.roomsAmmount{position:absolute;width:50px;height:45px;right:-60px;border:none;border-bottom:1px solid #f4b494;outline:0;font-size:1.4em;text-align:center;background-color:transparent;color:#fff}
*/
<div class="bedroomsButton">Bedrooms
  <div class="addRoom">
    <span class="plusOne">+</span>
  </div>
  <div class="subtractRoom">
    <span class="subtractOne">-</span>
  </div>
  <input class="roomsAmmount" type="number" value="0">
</div>

<div class="bathroomsButton">Bathrooms
  <div class="addRoom">
    <span class="plusOne">+</span>
  </div>
  <div class="subtractRoom">
    <span class="subtractOne">-</span>
  </div>
  <input class="roomsAmmount" type="number" value="0">
</div>

最佳答案

Document.querySelector()

The Document method querySelector() returns the first Element within the document that matches the specified selector, or group of selectors

您可以使用 querySelectorAll() 定位所有元素,然后使用 forEach() 循环它们附加事件处理程序。

// JAVASCRIPT/JQUERY (to increment by 1)
let addRoom = document.querySelectorAll(".addRoom");
let subtractRoom = document.querySelectorAll(".subtractRoom");

addRoom.forEach((el)=>{
  el.addEventListener('click', (e) => {
    let input = e.target.closest('.bedroomsButton,.bathroomsButton').querySelector(".roomsAmmount");
    input.value = parseInt(input.value) + 1;
  });
});

subtractRoom.forEach((el)=>{
  el.addEventListener('click', (e) => {
    let input = e.target.closest('.bedroomsButton,.bathroomsButton').querySelector(".roomsAmmount");
    input.value = parseInt(input.value) - 1;
  });
});
<div class="bedroomsButton">Bedrooms
  <div class="addRoom">
    <span class="plusOne">+</span>
  </div>
  <div class="subtractRoom">
    <span class="subtractOne">-</span>
  </div>
  <input class="roomsAmmount" type="number" value="0">
</div>

<div class="bathroomsButton">Bathrooms
  <div class="addRoom">
    <span class="plusOne">+</span>
  </div>
  <div class="subtractRoom">
    <span class="subtractOne">-</span>
  </div>
  <input class="roomsAmmount" type="number" value="0">
</div>

关于javascript - 我不明白为什么计数器在一个按钮上起作用而在另一个按钮上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60739690/

相关文章:

javascript - 为什么在构造选择器时会出现语法错误

javascript - 我无法让我的 jQuery 工作,并且我不确定我做错了什么

Javascript 比较日期 - d3.js 图表中的错误

javascript - 如何使用 jquery 隐藏或显示带有两个选择选项的输入

javascript - Web Speech API 滞后时间——如何解决?

javascript - 使用 Javascript/JQuery 使用 Ajax 加载 Google Maps API,回调设置不正确

javascript - Infovis rGraph 按需节点

javascript - 从对象数组创建模拟分层选择框

html - flex column wrap时,如何让第二列不占满第一列的高度?

javascript - 如何使用 javascript 在 html 中显示一个 div 并隐藏其他所有内容