jQuery切换菜单点击问题

jQuery切换菜单点击问题,jquery,menu,toggle,Jquery,Menu,Toggle,我只是想用jQuery创建一个简单的切换菜单,但无法让它正常工作 在当前状态下,它不会滑动切换 HTML: 我需要它来滑动切换,但也要适当地处理点击,这样父列表项就不会点击,而子菜单项会点击到它们的相关页面。 return false; 将e.preventDefault()(并停止传播)添加到而不是标记。 将单击重新绑定到或执行 (请参见“现在返回值是否为false?”此操作已执行多次。请查看以下链接: 如果我正确理解您的问题,这将满足您的要求: $(document).ready

我只是想用jQuery创建一个简单的切换菜单,但无法让它正常工作

在当前状态下,它不会滑动切换

HTML:

我需要它来滑动切换,但也要适当地处理点击,这样父列表项就不会点击,而子菜单项会点击到它们的相关页面。

return false; 
将e.preventDefault()(并停止传播)添加到
  • 而不是标记。 将单击重新绑定到或执行


    (请参见“现在返回值是否为false?”

    此操作已执行多次。请查看以下链接:


      • 如果我正确理解您的问题,这将满足您的要求:

        $(document).ready(function() {
        
            // Hide the sub menu items first
            $("ul#menu > li > ul").hide();
        
            // On click
            $('ul#menu > li > a').click(function() {
                if($('ul', $(this).parent()).children().length) {
                    $('ul', $(this).parent()).slideToggle("slow"); 
                    return false; 
                } else {
                    return true;
                }
            });
            $('ul#menu > li').click(function(e) {
                // If there are sub items toggle them & prevent default click action
                if ($(e.target).is("li")) { 
                    // or (e.target == this) if you don't want child li's to toggle
                    $('ul', this).slideToggle("slow");
                    return false;
                } else {
                    return true;
                }
        
            });
        });
        
        您可以在此处进行测试:


        更新:处理您在注释中指定的其他情况。

        我在本地和使用JSFIDLE对其进行了测试,但似乎不起作用。点击每个菜单项直接进入该页面,没有滑动切换(?)伊恩:我假设这就是你想要的,因为你的锚标签有特定的目标(one.html等)。我修改了我的答案,所以点击顶级锚不会跟随他们的目标。对此我很抱歉。我应该说明的。我只是在模仿CMS输出的动作,我计划使用它来链接父母,即使他们有孩子的时候不需要去任何地方。尽管列表中没有子项的项目也会停用链接,但仍然存在一个小问题。是否有方法检查列表项是否有子项,如果没有子项,则保留链接?谢谢你的帮助。这似乎解决了它!很抱歉我的无知,但我只是想弄明白为什么需要第二个单击处理程序,为什么它被放在li上,而不是上面的li a上?是否不可能简单地说它是否有子菜单,然后切换并阻止单击,但如果没有子菜单,请跟随链接?很明显,它是有效的,但我只是想了解它的确切原因和作用。再次感谢。Ian:LI的第二个单击处理程序是这样的,用户可以选择单击LI元素,它的面积比锚元素大,以展开/关闭菜单项。我认为这在你的设计中是很重要的,因为在你的问题中,你将点击事件处理程序绑定到了LIs。啊,好的观点。我把它改成了:$('ul#menu>li>a')。点击(function(){谢谢你的链接,但我不是在寻找插件或花式效果菜单。我只是想了解它为什么不起作用,并从那里建立基础。对我来说,理解为什么比使用插件更重要。
        return false; 
        
        $('#menu')
          .find('li').has('ul')
          .find('a').click(function() { return false; });
        
        $(document).ready(function() {
        
            // Hide the sub menu items first
            $("ul#menu > li > ul").hide();
        
            // On click
            $('ul#menu > li > a').click(function() {
                if($('ul', $(this).parent()).children().length) {
                    $('ul', $(this).parent()).slideToggle("slow"); 
                    return false; 
                } else {
                    return true;
                }
            });
            $('ul#menu > li').click(function(e) {
                // If there are sub items toggle them & prevent default click action
                if ($(e.target).is("li")) { 
                    // or (e.target == this) if you don't want child li's to toggle
                    $('ul', this).slideToggle("slow");
                    return false;
                } else {
                    return true;
                }
        
            });
        });