javascript - 如何停止事件传播到具有相同类的其他元素?

标签 javascript jquery jquery-events

我编写了这个绑定(bind)到按钮的函数,单击该按钮会切换类以提供下拉列表。唯一的问题是我在同一页面上有多个具有相同功能的按钮,并且单击其中一个按钮时它们都会触发:

app.bind.DirectionDropdown = function(){
    $('.direction-button').bind('click', function(){
        $('.direction-dropdown').toggleClass('active');
    });
    
};

这是 HTML:

<div class="contact-card">

      <div class="contact-directions">
        <ul class="contact-directions-items">
          <li class="map-pin contact-directions-item"><a href="#"><span class="fa fa-map-marker"></span></a></li>
          <li class="contact-directions-item"><p>3700-1 Place Ville Marie</p></li>
          <li class="contact-directions-item"><p>Montreal, Quebec</p></li>
          <li class="contact-directions-item"><p>H3B 3P4 Canada</p></li>
        </ul>
        <a href="#" title="#" class="link-button direction-button animate-after">Directions</a>
      </div><!-- end .contact-directions -->

    </div><!-- end .contact-card -->

    <div class="direction-dropdown fade-in">
    
      <h4>Direction on how to get here...</h4>

      <a href="#" class="link-button direction-button">Close</a>

        <!-- content --> 

    </div><!-- end .direction-dropdown -->

如何编辑此函数以仅在单击的一个按钮上触发,而不在其他按钮上触发?

最佳答案

该事件不会传播到其他按钮,但在单击事件中您会再次选择所有按钮。使用 this 仅选择被单击的按钮。

app.bind.DirectionDropdown = function(){
    $('.direction-button').bind('click', function(){
        $('.direction-dropdown').removeClass('active');
        $(this).parent().addClass('active');
    });
};

或者,如果您希望能够通过再次单击同一按钮来关闭菜单:

app.bind.DirectionDropdown = function(){
    $('.direction-button').bind('click', function(){
        // Remove the class from all others, excluding the clicked one.
        $('.direction-dropdown').not($(this).parent()).removeClass('active');
        // Toggle for the clicked one.
        $(this).toggleClass('active');
    });
};

关于javascript - 如何停止事件传播到具有相同类的其他元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712022/

相关文章:

jQuery:向下滑动并以特殊方式用另一张背景图像替换一张背景图像

javascript - 在 javascript 中使用 PHP 值 - 在alert() 中工作,但在 getelementbyid 中不工作

javascript - 模拟鼠标滚动事件

jquery在iframe窗口中触发自定义事件

javascript - 为什么在 jQuery 中将事件注册到文档是不好的做法?

javascript - IE 7 CSS 问题

javascript - HTTP post 请求 - AngularJS 和 JQuery 之间的区别

jquery - 具有多种颜色的跑马灯数据列表

javascript - Vanilla WebComponents 接近 : is there any real difference between "importing js from html" and "fetching html from js" file

javascript - 重新加载一组新图像使同位素中的 div 高度为 0