我有一个像这样的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,前提是上下文菜单没有重建,但这似乎也没有改变任何内容。
非常感谢任何帮助。
答案 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
功能调用您的位置显示更新。