【问题标题】:Showing and hiding a menu on button click, and hiding it with outside clicks单击按钮时显示和隐藏菜单,并通过外部单击隐藏菜单
【发布时间】:2010-11-18 00:16:12
【问题描述】:

我有以下代码,其中仅包含与项目相关的控件。

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

单击按钮时菜单正确打开,单击另一个按钮或在菜单外单击时关闭。但是,单击同一个按钮两次不会关闭菜单!伙计们,这是怎么回事,我知道这很容易,但我已经为此苦苦挣扎了好几个小时。

【问题讨论】:

    标签: javascript jquery menu toggle show-hide


    【解决方案1】:

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

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

    【讨论】:

    • 哦,我明白了,谢谢!我应该想出来的。我移动了“$('ul.controls li.options').hide();” (//hiding all other open menus 注释下的那个,并将它移到“bitOptionMenu.css('display','block');”之前。
    • 就您解决 OP 的问题而言,赞成反对(可悲的是无法解释的)反对票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多