将事件侦听器添加到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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

将事件侦听器(在回调函数中)添加到生成的元素

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

将事件侦听器添加到由事件侦听器添加的表单元素

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

将事件侦听器添加到if语句

来自分类Dev

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

来自分类Dev

将setTimeout添加到事件侦听器

来自分类Dev

将setTimeout添加到事件侦听器

来自分类Dev

将setTimeout添加到事件侦听器

来自分类Dev

将setTimeout添加到事件侦听器

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类常见问题

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

来自分类Dev

将事件侦听器添加到基于类的DOM元素

来自分类Dev

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

来自分类Dev

在插入CKEDITOR时将事件侦听器添加到元素吗?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何将事件侦听器添加到仅按钮元素

来自分类Dev

将事件侦听器添加到音频元素不起作用

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    将事件侦听器(在回调函数中)添加到生成的元素

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    将事件侦听器添加到由事件侦听器添加的表单元素

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

    将事件侦听器添加到if语句

  13. 13

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

  14. 14

    将setTimeout添加到事件侦听器

  15. 15

    将setTimeout添加到事件侦听器

  16. 16

    将setTimeout添加到事件侦听器

  17. 17

    将setTimeout添加到事件侦听器

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

    将事件侦听器添加到基于类的DOM元素

  23. 23

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

  24. 24

    在插入CKEDITOR时将事件侦听器添加到元素吗?

  25. 25

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

  26. 26

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

  27. 27

    如何将事件侦听器添加到仅按钮元素

  28. 28

    将事件侦听器添加到音频元素不起作用

  29. 29

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

热门标签

归档