阻止菜单键显示上下文菜单

时间:2012-08-20 17:00:06

标签: javascript events contextmenu

我知道keyboard menu keykeyCode === 93

所以我有以下代码:

$(window).on("keydown", document, function(event){
    if (event.keyCode === 93)  {   //context menu
        console.log("context menu key", event);
        event.preventDefault();
        event.stopPropagation();
        return false;
    }
});

虽然事件确实触发,而console确实记录在if语句中,,即使 <仍然显示上下文菜单em>两个 event.preventDefault();event.stopPropagation();都出现在我的代码中。

有没有办法阻止显示菜单?

小丑的演示:http://jsfiddle.net/maniator/XJtpc/


对于那些不知道“菜单”键是什么的人:

2 个答案:

答案 0 :(得分:3)

这有点愚蠢,但似乎有效:http://jsfiddle.net/XJtpc/2/:)

$(function(){
    var lastKey=0;
    $(window).on("keydown", document, function(event){
        lastKey = event.keyCode;            
    });

    $(window).on("contextmenu", document, function(event){
        if (lastKey === 93){
            lastKey=0;
            event.preventDefault();
            event.stopPropagation();
            return false;
        }
    });
});
​

答案 1 :(得分:0)

我从@aquinas 的解决方案开始,但发现它可以比这简单一点。

步骤

  1. 注册 keydown 事件处理程序。 e.preventDefault 不需要。
  2. 注册 contextmenu 事件处理程序,然后执行 e.preventDefault()

示例:

// JavaScript
// Register your `ContextMenu` key event handler
document.querySelector('body').onkeydown = (e) => {
  if (e.key === 'ContextMenu') {
    // Do something
  }
}

// Prevent `contextmenu` event default action
document.querySelector('body').oncontextmenu = (e) => e.preventDefault();


// jQuery
// Register your `ContextMenu` key event handler
$('body').on('keydown', (e) => {
  if (e.key === 'ContextMenu') {
    // Do something
  }
});

// Prevent `contextmenu` event default action
$('body').on('contextmenu', (e) => e.preventDefault());