将事件侦听器添加到js中的多个选择元素

阿米尔哈尔比

我有不同的选择元素来更改不同产品的尺寸,每种尺寸都有不同的价格。我可以使用querySelector使用一个选择元素来做到这一点,但不适用于querySelectorAll。

这是我仅更改一个选择元素的代码:

const price = document.querySelector(".price");
const select = document.querySelector(".select");

select.addEventListener("change", () => {
  price.innerText = select.options[select.selectedIndex].value;
});
<div>
  <p class="price">$15</p>
  <select class="select">
    <option disabled hidden selected>size</option>
    <option value="$20">40cmx40cm</option>
    <option value="$30">30cmx40cm</option>
    <option value="$50">50cmx50cm</option>
  </select>
</div>

我已经尝试过for和forEach循环,但是没有任何效果(可能是因为我做错了)。任何帮助,将不胜感激。我迷失了方向。

斯科特·马库斯(Scott Marcus)

您可以通过使用“事件委托来完成此操作,事件委托中,您可以在一个元素上设置一个处理程序,该元素是select要处理其事件的所有元素的共同祖先该事件将始于,select但不会在那里处理,并将“冒泡”直至您选择的祖先。然后,您在该祖先处处理事件,并使用event.target处理程序中可访问的事件来引用触发事件的实际元素,并使用相对DOM引用来引用p您需要更新元素。

这样做的好处是您只需设置一个处理程序(这样可以节省内存和性能),并且可以简化代码。此外,您可以添加新select结构,而无需完全更改处理代码。

// Set up a single handler at a common ancestor of all the select elements
document.body.addEventListener("change", function(event){
  // event.target references the element that actually triggered the event
  let target = event.target;
  
  // Check to see if the event was triggered by a DOM element
  // you care to handle
  if(target.classList.contains("select")){
    // Access the <p> element that is the previous sibling to the 
    // select that triggered the event and update it
    target.previousElementSibling.textContent = target.value
  }
});
<div>
  <p class="price">$15</p>
  <select class="select">
    <option disabled hidden selected>size</option>
    <option value="$20">40cmx40cm</option>
    <option value="$30">30cmx40cm</option>
    <option value="$50">50cmx50cm</option>
  </select>
</div>
<div>
  <p class="price">$15</p>
  <select class="select">
    <option disabled hidden selected>size</option>
    <option value="$20">40cmx40cm</option>
    <option value="$30">30cmx40cm</option>
    <option value="$50">50cmx50cm</option>
  </select>
</div>
<div>
  <p class="price">$15</p>
  <select class="select">
    <option disabled hidden selected>size</option>
    <option value="$20">40cmx40cm</option>
    <option value="$30">30cmx40cm</option>
    <option value="$50">50cmx50cm</option>
  </select>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将多个事件侦听器添加到一个元素

使用for循环并传递不同的参数将事件侦听器添加到多个元素

将事件侦听器添加到多个生成的元素

使用jQuery将事件侦听器添加到动态添加的元素中

将事件侦听器添加到Angular 4中的DOM元素

将事件侦听器添加到香草javascript中尚不存在的元素

将事件侦听器添加到从template标签克隆的元素中

如何将事件侦听器添加到数组中的每个元素?

将点击事件侦听器添加到电子应用程序中的元素

将事件侦听器添加到动态创建的元素中

将事件侦听器添加到使用Javascript从API捕获的动态生成的元素中

将事件侦听器添加到容器中具有相同类的多个 div

如何将事件侦听器添加到tone.js中播放的音符

如何将 scaleUp 类添加到 onmouseover 事件侦听器上的多个跨度元素

将事件侦听器添加到动态添加的列表元素

如何添加触发将某种类型的元素添加到DOM的事件侦听器?

如何将侦听器事件添加到由DefaultListModel对象添加的JList元素?

将同一事件侦听器功能添加到多个元素

将事件侦听器添加到绘制的对象

尝试将事件侦听器添加到JTextField

将拖动事件侦听器添加到iframe

将“this”添加到事件侦听器?

将setTimeout添加到事件侦听器

如何将事件侦听器添加到具有相同类的多个输入中

如何将事件侦听器添加到动态创建的HTML列表元素?

将Click事件侦听器添加到具有相同类的元素

将事件侦听器添加到HTML元素集合

如何通过JavaScript将事件侦听器添加到body元素?

Dojo-将事件侦听器添加到动态创建的元素