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

我对 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>


开满天机
浏览 63回答 3
3回答

子衿沉夜

文档.querySelector()Document 方法返回文档中与指定选择器或选择器组匹配的querySelector() 第一个元素您可以使用 定位所有元素,然后使用附加事件处理程序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>

蝴蝶刀刀

就像评论所说,document.querySelector只返回第一个元素或 null。这样做:let addRoom = document.querySelectorAll(".addRoom");let subtractRoom = document.querySelectorAll(".subtractRoom");addRoom.forEach(btn => {&nbsp; &nbsp; setInputValue(btn, true)&nbsp; })subtractRoom.forEach(btn => {&nbsp; &nbsp; setInputValue(btn, false)&nbsp; })function setInputValue(btn, plus) {&nbsp; const input = btn.parentNode.querySelector('input')&nbsp; btn.addEventListener('click', () => {&nbsp; &nbsp; const originalValue = parseInt(input.value)&nbsp; &nbsp; input.value = String(plus ? originalValue + 1 : originalValue - 1)&nbsp; });}

慕工程0101907

clickable为每个 + 和 -添加类选择全部clickable并在每个元素上添加事件侦听器document.querySelectorAll(`.clickable`).forEach(el => el.addEventListener(`click`, handleClick))handleClick函数看起来像这样const handleClick = (e) => {&nbsp; // selecting a closest input&nbsp; const input = e.target.parentElement.parentElement.querySelector(".roomsAmmount");&nbsp; // parsing value&nbsp;&nbsp; let newValue = parseInt(input.value);&nbsp; // if clicked element has class plusOne&nbsp; if (e.target.classList.contains(`plusOne`)) {&nbsp; &nbsp; newValue++; // increase&nbsp; }&nbsp; // if clicked element has class subtractOne&nbsp; if (e.target.classList.contains(`subtractOne`)) {&nbsp; &nbsp; newValue--; // decrease&nbsp; }&nbsp; // update value&nbsp; input.value = newValue;}工作示例https://jsfiddle.net/yqp5zx1b/1/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5