3

我从 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().

4

3 回答 3

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'
    });
});​
于 2012-06-29T21:52:48.367 回答
2

试试这个代码:

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

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

于 2012-10-02T08:55:54.673 回答
0

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

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

在此行之后添加它

if(event.which === 3){

这应该会给你想要的效果。

于 2012-06-29T21:26:18.690 回答