右键单击时,jQuery悬停菜单消失

右键单击时,jQuery悬停菜单消失,jquery,hover,contextmenu,show-hide,right-click,Jquery,Hover,Contextmenu,Show Hide,Right Click,我有一个菜单,悬停时打开。但右键单击时,当上下文菜单打开时,菜单消失。但我不明白为什么。我需要使用contextmenu/右键单击同时打开悬停菜单 jQuery代码(版本jQuery-1.11.2.min.js): HTML: <div id="main_menu"> <img id="menu_button" src="/skin/images/all/structure/menu_button.png" alt="Men&uuml;" /> &

我有一个菜单,悬停时打开。但右键单击时,当上下文菜单打开时,菜单消失。但我不明白为什么。我需要使用contextmenu/右键单击同时打开悬停菜单

jQuery代码(版本jQuery-1.11.2.min.js):

HTML:

<div id="main_menu">
    <img id="menu_button" src="/skin/images/all/structure/menu_button.png" alt="Men&uuml;" />
    <div id="main_menu_inner">
        <img id="menu_arrow" src="/skin/images/all/structure/main_menu_arrow_down.png" alt="Arrow" />
        <div class="clear_right"></div>
        <ul>
            <li>
                <a href="">Link</a>
            </li>
            <li>
                <a href="">Link</a>
            </li>
            <li>
                <a href="">Link</a>
            </li>
        </ul>
    </div>
</div>

您可以通过添加布尔值来检查上下文菜单是否打开到
mouseleave
事件处理程序中,从而“破解”鼠标悬停的行为。这不是一个很好的做法,但它使您的请求成为可能:

var contextMenuOpened = false;

$(document).on('mouseover', '#main_menu', function () {
    $('#main_menu_inner').show();
    contextMenuOpened = false;
});

$(document).on('mouseleave', '#main_menu', function () {
    $("#main_menu").on('contextmenu', function (e) {
        contextMenuOpened = true;
    });
    if (!contextMenuOpened) {
        $('#main_menu_inner').hide();
    }
});


mouseleave
=>
hide
Hmm但是当我删除mouseleave代码时,菜单在鼠标离开时保持不变。好吧,你需要在这里计算出逻辑。恐怕社区无法帮助您解决这一问题。好的,谢谢您的帮助:)项目是嵌套的,因此
事件
正在冒泡。搜索一下,你就会把自己弄清楚。注册
$(“#主菜单”)是个坏主意。在('contextmenu'
上为每个
mouseleave
。如果你离开
#主菜单
,例如树时间,那么就有为
#主菜单
注册的树回调执行同样的操作。
var contextMenuOpened = false;

$(document).on('mouseover', '#main_menu', function () {
    $('#main_menu_inner').show();
    contextMenuOpened = false;
});

$(document).on('mouseleave', '#main_menu', function () {
    $("#main_menu").on('contextmenu', function (e) {
        contextMenuOpened = true;
    });
    if (!contextMenuOpened) {
        $('#main_menu_inner').hide();
    }
});