如何在随后的右键单击中关闭jquery上下文菜单

时间:2012-06-29 20:31:25

标签: jquery jquery-plugins contextmenu

我从Javascript Toolbox实现了jQuery ContextMenu插件,它的工作非常精彩。当我在某些指定区域中右键单击时,它会打开我想要的上下文菜单,因此除了一件事之外,它在所有内容中都很有效:

当我在另一个菜单仍处于打开状态时右键单击打开上下文菜单时,它不会关闭原始上下文菜单。只要我点击表格的另一行,就会打开一个新的上下文菜单而不关闭其他行。

然而,当我左键单击时,它们全部关闭。

非常感谢一些帮助,甚至推动正确的方向。

提前致谢!

插件地址: http://www.javascripttoolbox.com/lib/contextmenu/

编辑:这是用于调用上下文菜单的代码

$("#sku_table tbody").mousedown(function(event) {
    if (event.which === 3) {

        var sku = $(event.target).closest('tr').attr('id');
        sku = sku.replace('.', '\\.');
        var menu1 = [
            {
            'Open Item information': {
                onclick: function(menuItem, menu) {
                    //Function to open item info
                }
            }}
        ];
        $(function() {
            $('#' + sku).contextMenu(menu1, {
                theme: 'vista'
            });
        });

    }
});​

实际打开菜单的是$().contextMenu()

3 个答案:

答案 0 :(得分:2)

似乎每次在表体内右键单击时,都会创建一个新的上下文菜单实例。相反,如果您为上下文菜单应显示的内容定义选择器,菜单将只显示在那里。

如果上下文菜单会显示在随机项上,那么应该使用类定义这些项,并且可以从该类中实例化上下文菜单。

http://jsfiddle.net/azSMq/

$(function() {
    var menu1 = [
        {
        'Open Item information': {
            onclick: function(menuItem, menu) {
                $(this).fadeOut();
                //Function to open item info
            }
        }}
    ];
    $("#sku_table tr").contextMenu(menu1, {
        theme: 'vista'
    });
});​

答案 1 :(得分:2)

试试这段代码:

$("#sku_table tr").contextMenu(menu1, { theme: 'vista',
    beforeShow: function () {
        $(document).click();
        return true;
    } 
});

强制单击文档将调用插件中的内部代码,该代码将自动隐藏其他上下文菜单

答案 2 :(得分:0)

有趣的是,演示页面似乎在Firefox中可以正常工作,但在Chrome或IE中却没有。处理此问题的一种方法是在显示刚刚右键单击的菜单之前隐藏任何打开的菜单。所以你可以添加这段代码:

$(".context-menu").hide();

在此行之后添加

if(event.which === 3){

这应该会给你带来理想的效果。