显示并隐藏按钮单击上的菜单,并通过外部点击隐藏它

时间:2009-08-08 21:55:05

标签: javascript jquery menu toggle show-hide

我有以下代码,只有与项目相关的控件。

<ul class="controls">
    <li><button type="button" class="button1" value="somevalue">&nbsp;</button></li>
    <li><button type="button" class="optionsbutton" value="somevalue">&nbsp;</button></li>
    <li class="options">
        <ul>
            <li>Option 1 link</li>
            <li>Option 2 link</li>
            <li>Option 3 link</li>
       </ul>
    </li>
</ul>

默认情况下,选项菜单(li.options中的ul)隐藏在css中(通过display:none)。我想点击选项按钮(button.optionsbutton)来切换显示和隐藏ul,但我也想要点击任何其他选项按钮(这个按钮有很多项目)来关闭任何打开的菜单我需要一个单击按钮上的任何位置也可以关闭菜单。我的Jquery代码如下:

$('button.optionsbutton').click(
    function(event){
        // hiding any other open menus
        $('ul.controls li.options').hide();

        var OptionMenu = $(this).parent('li').siblings('.options');
        if ( OptionMenu.is(':visible') ) {
            $('ul.bit_controls li.bit_options').hide();
        } else {
            bitOptionMenu.css('display','block'); 
            //because show() sets display to list-item insteads of block
        } 

        event.stopPropagation();
    }
);

// So that clicks anywhere outside will close the menu
$('html').click(
    function(event){
        if(event.target != 'button.options' && $('button.options').is(':visible') ) {
            $('ul.controls li.options').hide();
        }
    }
);

单击按钮时菜单打开正常,单击另一个按钮或菜单外单击时关闭菜单。但是,点击两次相同的按钮不会关闭菜单!什么是这里的交易,我知道这很简单,但我已经打了几个小时的头。

1 个答案:

答案 0 :(得分:2)

$('ul.controls li.options').hide();可能会隐藏您的菜单。

如果是这种情况,测试if ( OptionMenu.is(':visible') )将始终返回false并显示菜单。