javascript - 类(Class)后代扰乱事件

标签 javascript jquery dom slide traversal

我有一个简单的下拉菜单。当您单击.drop-down时,子菜单会向下滑动。但是,如果您单击 .drop-down 的任何子级,它会再次向上滑动。我只需要单击来滑动菜单的 .drop-down,而不需要其后代。

这是在行动:http://jsfiddle.net/tmyie/uXn5k/2/

<ul>
    <li class="drop-down">
        <a href="#"> Main </a> 
        <ul class="sub-menu">
          <li><a href="#">Sub</a> </li>
          <li><a href="#">Sub</a> </li>
          <li><a href="#">Sub</a> </li>
        </ul>
    </li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
</ul>

jQuery

$( ".drop-down" ).click(function() {
  $('.sub-menu').slideToggle();
});

$('.drop-down').fadeTo('slow', 0.3);

http://jsfiddle.net/tmyie/uXn5k/2/

最佳答案

专门针对a

$( ".drop-down>a" ).click(function() {
  $('.sub-menu').slideToggle();
});

$('.drop-down').fadeTo('slow', 0.3);

或者,只需将类从 li 移动到 a

<ul>
    <li>
        <a href="#" class="drop-down"> Main </a> 
        <ul class="sub-menu">
        <li><a href="#">Sub</a> </li>
        <li><a href="#">Sub</a> </li>
        <li><a href="#">Sub</a> </li>
    </ul></li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
    <li><a href="#">Main</a> </li>
</ul>

编辑:

顺便说一句,使用此脚本您会遇到多个下拉菜单的麻烦。考虑进行以下更改:

   $( ".drop-down>a" ).on("click", function() {
      $(this).siblings('.sub-menu').slideToggle();
    });

    $('.drop-down').fadeTo('slow', 0.3);

http://jsfiddle.net/uXn5k/6/

关于javascript - 类(Class)后代扰乱事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838441/

相关文章:

javascript - GatsbyJS 不变违规 : Encountered an error trying to infer a GraphQL type

javascript - 无法从 Sublime Text 中的 html 访问 javascript 代码

JSON 对象中的 Javascript 数组

javascript - 从 DOM 上下文调用 casperjs 捕获(评估)

javascript - 为什么数组会丢失它的值?

javascript - json 解析 - 取消转义引号

javascript - 使用 angularjs 检查下拉列表中是否存在值插入

javascript - jQuery Deferred/Promises 动态数组未按正确顺序执行回调

javascript - 在 sencha touch 2 中改变方向时删除类

javascript - 如何从 JavaScript 中的 dom 坐标点获取或创建选择或范围?