【发布时间】:2014-08-23 06:01:51
【问题描述】:
我有一个像这样的 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,假设上下文菜单没有重建,但这似乎也没有改变任何东西。
任何帮助将不胜感激。
【问题讨论】:
-
能否提供一个 jsfiddle,以便我们将问题可视化?
-
@Raptus 我本来应该这样做的..http://jsfiddle.net/Ruxb7/。此外,我通过删除菜单重新定位的代码部分,实现了一个相当混乱的解决方案,即更改上下文菜单的 javascript 文件。不幸的是,这将导致上下文菜单关闭,然后您需要再次右键单击以重新打开它。所以它并不能解决根本问题,但它确实可以防止用户从多次右键单击问题中获取错误信息。
标签: jquery html events contextmenu