微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

事件监听器的问题

如何解决事件监听器的问题

我想在点击四个按钮之一后进行操作。不幸的是,只工作一个,并不是很好。请帮忙 !!! :( 单击四个箭头之一后,我的菜单应展开。 NIestetty 在这一点上,菜单只会在单击一个箭头后展开,所以我无法折叠它。关闭循环中的记录后。菜单展开又折叠,但所有四个部分都展开了,而不是我选择的那个。此外,函数继续仅对四个箭头之一做出反应。

enter image description here

initaccordion(){
      const thisProduct=this;

      /* find the clickable trigger (the element that should react to clicking) */
      const clickableTrigger = document.querySelector(select.menuProduct.clickable);

      /* START: add event listener to clickable trigger on event click */
      clickableTrigger.addEventListener('click',function(event) {
      /* prevent default action for event */
        event.preventDefault();

        /* find active product (product that has active class) */
        const findActiveClass = document.querySelectorAll(select.all.menuProductsActive);
        
        /* if there is active product and it's not thisProduct.element,remove class active from it */
      for (let activeLink of findActiveClass){
          thisProduct.element = activeLink;
          activeLink.classList.remove(classNames.menuProduct.wrapperActive);
        }
        
        

        /* toggle active class on thisProduct.element */
        thisProduct.element.classList.toggle(classNames.menuProduct.wrapperActive);
      });
    }
<script id="template-menu-product" type="text/x-handlebars-template">
      <article class="product "> <!-- product -->

          <header class="product__header">
            <h3 class="product__name no-spacing">{{ name }} <i class="fas fa-chevron-down product__icon"></i></h3>
            <p class="product__base-price no-spacing">${{ price }}</p>
          </header>
          <div class="product__description"> <!-- description -->
            <p>{{{ description }}}</p>
          </div> <!-- .description -->
          <div class="product__wrapper"> <!-- details -->
            <form class="product__order">
              <ul class="product__params"> <!-- params -->
                {{#each params as |param paramId| }}
                {{#ifEquals type "checkBoxes"}}
                <li> <!-- checkBoxes -->
                  <h3 class="product__params-title">{{{ label }}}</h3>
                  {{#each options}}
                  <div class="checkBox"> <!-- checkBox -->
                    <label>
                      <input type="checkBox" name="{{ paramId }}" value="{{ @key }}" id="{{ @key }}" {{#if default}}checked{{/if}}>
                      <span class="checkBox__checkmark"></span>
                      {{{ label }}} (${{{ price }}})
                    </label>
                  </div>
                  {{/each}}
                </li>
                {{/ifEquals}}
                {{#ifEquals type "radios"}}
                <li> <!-- radios -->
                  <h3 class="product__params-title">{{{ label }}}</h3>
                  {{#each options}}
                  <div class="checkBox checkBox--round"> <!-- radio -->
                    <label>
                      {{{ label }}} (${{{ price }}})
                      <input type="radio" name="{{ paramId }}" value="{{ @key }}" id="{{ @key }}" {{#if default}}checked{{/if}}>
                      <span class="checkBox__checkmark"></span>
                    </label>
                  </div>
                  {{/each}}
                </li>
                {{/ifEquals}}
                {{#ifEquals type "select"}}
                <li> <!-- select -->
                  <h3 class="product__params-title">{{{ label }}}</h3>
                  <select name="{{ paramId }}">
                    {{#each options}}
                    <option value="{{ @key }}" {{#if default}}selected{{/if}}>{{{ label }}} (${{{ price }}})</option>
                    {{/each}}
                  </select>
                </li>
                {{/ifEquals}}
                {{/each}}
              </ul>
              <div class="amount"> <!-- controls -->
                <div class="widget-amount"> <!-- widget-amount -->
                  <h3 class="product__params-title">Select quantity</h3>
                  <a class="btn-quantity" href="#less"><i class="fas fa-minus"></i></a>
                  <input type="text" name="amount" value="1">
                  <a class="btn-quantity" href="#more"><i class="fas fa-plus"></i></a>
                </div>
                <p class="product__total-price">
                  Total: $<span class="price">{{{ price }}}</span>
                </p>
                <div> <!-- add-to-cart -->
                  <a class="btn-primary" href="#add-to-cart">Add to cart</a>
                </div>
              </div>
            </form>
            <div class="product__images {{ class }}"> <!-- images -->
              {{#each images}}
              {{{ this }}}
              {{/each}}
            </div>
          </div>

      </article> <!-- .product -->
    </script>

解决方法

如果你想在JS中添加多个EventListener,你必须.querySelectorAll()元素 和 forEach 他们像这样:

<button class="myButton">Click me</button>
<button class="myButton">Click me too</button>
<button class="myButton">Click me too again</button>
<button class="myButton">Click me too again also</button>
var myButtons = document.querySelectorAll("myButton");
myButtons.forEach(button=>{
 button.addEventListener("click",() => {
   // do something
 });
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。