退出由mousedown事件触发的jquery函数

时间:2014-07-02 12:36:27

标签: jquery html events contextmenu

我有一个像这样的jquery函数:

$(function(){
    $('.viewArea').mousedown(function(event) {
        if(event.which === 3){  // On right click
            pos = ("(" + event.pageX + "," + event.pageY + ")");
            console.log(pos);  // Log the xy coords of click to console
            $.contextMenu("destroy");  // Unregister previous context menu
            $.contextMenu({  // Create new context menu
                selector: '.viewArea',
                callback: function(key, options){
                    var m = "clicked: " + key;
                    window.console && console.log(m);
                },
                items: {
                    "pos":{name:pos,disabled:true}, // have pos in context menu
                    "ci1":{name:"ContextMenu 1"},
                    "ci2":{name:"ContextMenu 2"}
                }
            });
        }
    })
});

此函数使用jquery插件" jQuery contextMenu"。

我想要的是能够右键单击并在上下文菜单中显示pos坐标。问题是,在创建第一个上下文菜单后,立即创建第二个上下文菜单(右键单击其他位置)将不会显示更新的坐标。退出第一个上下文菜单(通过左键单击外部或选择一个选项)然后打开一个新的上下文菜单将显示更新的坐标。

对问题的深入研究表明,如果您不断右键单击打开上下文菜单,则应该记录新位置时,控制台不会记录任何。换句话说,它只检测到一次右击而不是再次通过该功能,直到发生了不同的输入。

我尝试使用.click事件(并点击左键),但同样的问题也出现了。我还尝试将jquery.contextMenu.js中的重新定位标志更改为false,前提是上下文菜单没有重建,但这似乎也没有改变任何内容。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

目前无法做到这一点。通过检查jsfiddle上的html,你可以看到contextMenu的实现方式,一个不可见的元素被放置在你将contextMenu绑定到(.viewArea)的任何元素上。你可以通过检查覆盖元素#context-menu-layer来自己验证这一点(使用jQuery来搜索这个元素在jsfiddle中不起作用,因为输出示例在iframe中。你仍然可以手动检查'Elements'选项卡chrome调试器。)

您还可以通过查看source code来验证这一点。在第347行的layerClick函数内部,您可以看到此处理程序已杀死所有事件(第358-359行)。处理程序绑定到{11}行mousedown上的所有#context-menu-layer个事件。

我建议使用适合您需求的其他库。

与此同时,我已经为jQuery contextMenu创建者/维护者提交了bug

答案 1 :(得分:2)

这个插件的作者在这里......

我不确定你到底想要实现的目标是什么。但为了帮助您找到正确的方向,我已修复您的示例,使用position功能调用您的位置显示更新。

http://jsfiddle.net/Ruxb7/1/