阶级后裔扰乱事件

时间:2013-11-07 14:28:59

标签: 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/

1 个答案:

答案 0 :(得分: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/