Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery获取单击的元素_Jquery_Drop Down Menu_Menu_Sliding - Fatal编程技术网

使用jQuery获取单击的元素

使用jQuery获取单击的元素,jquery,drop-down-menu,menu,sliding,Jquery,Drop Down Menu,Menu,Sliding,我尝试了一些jQuery,我想知道如何让滑动菜单工作。 我在上有一个类“下拉列表”。我单击的所有将显示一个子菜单。子菜单具有指定给它们的类“子菜单” 我在做这项工作方面已经取得了相当大的进展。现在我想确定的是,当单击子菜单项时,它们的行为与正常情况相同。默认情况下,现在可以防止这种情况。整洁的功能,但我想为子菜单禁用它 我有以下代码: $(document).ready(function () { $('.dropdown > li').click(function () {

我尝试了一些jQuery,我想知道如何让滑动菜单工作。 我在
    上有一个类“下拉列表”。我单击的所有
    将显示一个子菜单。子菜单具有指定给它们的类“子菜单”

    我在做这项工作方面已经取得了相当大的进展。现在我想确定的是,当单击子菜单项时,它们的行为与正常情况相同。默认情况下,现在可以防止这种情况。整洁的功能,但我想为子菜单禁用它

    我有以下代码:

    $(document).ready(function () {
        $('.dropdown > li').click(function () {
            var $el = $('ul', this); // element to toggle
            $('.dropdown > li > ul').not($el).slideUp();
            $(this).find('.sub-menu ').slideToggle();
        });
        $('.dropdown > li').children().children().click(function (e) {
            return false;
        });
        $(".dropdown > li > a").click(function (e) {
            e.preventDefault();
        });
    });
    
    我添加了preventDefault以避免主菜单上的正常例程,并禁用了子菜单的slideToggle操作

    现在我想为子菜单添加默认行为。他们现在什么也不做

    编辑: 我发现JQuery的“not”部分,我正在努力让它发挥作用(因为我还没有一个令人满意的答案)。我想要的是从滑动子菜单的函数中排除属于“sub-menu”类的所有。我想到的语法是:

    $('.dropdown > li').not('ul.sub-menu > li > a').click(function() {
    }
    

    但它不起作用。当我点击其中的一个按钮时,它仍然执行该功能。那么,我如何重新表述上述代码,以使上述函数始终执行,除非在某个元素中?

    您可以对第一个或任何指定元素执行以下操作:

    $(document).ready(function () {
        $('.menu-item').bind('click', function () {
            if($(this).children('ul').length =0){      
                return false;      
            }
           else{
               $(this).children('.sub-menu ').slideToggle();
               return false;
           }    
        });
    });
    
    <ul class="dropdown">
        <li class="menu-item">
            <a href="#">
          ITEM1
            </a>
        </li>
        <li class="menu-item">
            <a href="#">
          ITEM2
            </a>
            <ul class="sub-menu" >
                <li class="menu-item">
                    <a href="#">
                      SUBITEM1
                    </a>
                </li>
                <li class="menu-item">
                  <a href="#">
                     SUBITEM2
                  </a>
                </li>
            </ul>
        </li>
    </ul>
    
    如果HTML代码如下所示:

    $(document).ready(function () {
        $('.menu-item').bind('click', function () {
            if($(this).children('ul').length =0){      
                return false;      
            }
           else{
               $(this).children('.sub-menu ').slideToggle();
               return false;
           }    
        });
    });
    
    <ul class="dropdown">
        <li class="menu-item">
            <a href="#">
          ITEM1
            </a>
        </li>
        <li class="menu-item">
            <a href="#">
          ITEM2
            </a>
            <ul class="sub-menu" >
                <li class="menu-item">
                    <a href="#">
                      SUBITEM1
                    </a>
                </li>
                <li class="menu-item">
                  <a href="#">
                     SUBITEM2
                  </a>
                </li>
            </ul>
        </li>
    </ul>
    
    对于演示:

    ,正如我所评论的

    $('.dropdown > li').children().children().click(function (e) {
        return false;
    });
    
    选择子菜单链接时,
    返回false
    具有与
    e.preventDefault()相同的效果


    只需拿出那一点

    我终于找到了我想要的东西。在下面的代码中(在所有“其他”子项都向上滑动之后),检查当前菜单项是否包含可见的子项。如果不是向上滑动,则向下滑动

    $(function() {
     $('ul.dropdown > li > a').click(function () {
      var $el = $('ul', this);
      $('.dropdown > li > ul').not($el).slideUp();
      if(  $(this).parent().find('.sub-menu ').is(":visible"))
      {$(this).parent().find('.sub-menu ').slideUp();}
      else
      {$(this).parent().find('.sub-menu ').slideDown();}
     });
    
     $(".dropdown > li > a").click(function (e) {
        e.preventDefault();
     });
    
    }))


    因为它明确地针对类“dropdown”(即主菜单项)的a元素,所以子项的默认行为是不变的。(正因为如此,需要this.parent()来查找子菜单项。)

    你能用Yep做一个演示吗,这里是:只需去掉“疯狂的孩子”部分,就可以了。发生的情况是,单击子菜单项时,它们会滑开。我希望他们呆在原地不动,做出违约行为。不是功能,什么?单击子菜单项时,您将导航到链接页面作为默认行为。如果您在选择器字符串中使用它,则为
    :eq(0)
    。是的,它的:eq(0)或可以使用:第n个子项(0),如此,thanx for correction@DavidI看到您编辑并看到JFiddle。问题是,单击子菜单项时,它们会向上滑动。他们应该留下来。不要滑。谢谢,但还是不在那里。这正是我想要的,但有一点。我在子项中添加了两个警报框。我希望在单击子项时看到这些。但其余的一切都应该保持原样。请参见上面的注释:当我取出该部件时,子菜单项现在正在执行该功能。我不想让他们滑倒。我希望它们在单击时始终停留在原地,并在那里执行默认行为。它们是这样的:子项应该打开一个弹出窗口…为了防止在子菜单上滑动,单击将事件附加到
    a
    而不是
    li
    ,当我执行$('.dropdown>li>a')。单击(function(),子菜单向上滑动,但不再向下滑动。。。