jQuery切换菜单点击问题

时间:2010-12-13 20:59:37

标签: jquery menu toggle

我只是想用jQuery创建一个简单的切换菜单但是不能让它正常工作。

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

HTML:

<ul id="menu">
    <li><a href="one.html">One</a>
        <ul>
            <li><a href="one-one.html">one one</a></li>
            <li><a href="one-two.html">one two</a></li>
            <li><a href="one-three.html">one three</a></li>
        </ul>
    </li>
    <li><a href="two.html">Two</a></li>
    <li><a href="three.html">Three</a>
        <ul>
            <li><a href="three-one.html">three one</a></li>
            <li><a href="three-two.html">three two</a></li>
            <li><a href="three-three.html">three three</a></li>
        </ul>
    </li>
    <li><a href="four.html">Four</a></li>
</ul>

JS:

$(document).ready(function() {

    // Hide the sub menu items first
    $("ul#menu > li > ul").hide();

    // On click
    $('ul#menu > li').click(function() {

        // If there are sub items toggle them & prevent default click action
        if ( ('ul#menu > li').has('ul').length > 0 ) {
            $('ul#menu > li > ul').slideToggle("slow");
            return false;
        };

    });
});

我需要它来滑动切换,但也适当地处理点击,因此父列表项不会点击,但子菜单项会点击进入相关页面。

3 个答案:

答案 0 :(得分:0)

return false; 

将e.preventDefault()(并停止传播)添加到&lt; li&gt;而不是&lt; a&gt;标签。  将点击重新绑定到&lt; a&gt;或者做

$('#menu')
  .find('li').has('ul')
  .find('a').click(function() { return false; });

(请参阅&lt; a&gt;现在获得返回false?)

答案 1 :(得分:0)

答案 2 :(得分:0)

如果我理解你的问题,这将做你想要的事情:

$(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;
        }

    });
});

您可以在此处进行测试:http://jsfiddle.net/5fNbh/

更新:处理您在评论中指定的其他案例。