3

我知道键盘菜单键keyCode === 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 语句中记录了,上下文菜单仍然显示,即使两者 event.preventDefault();event.stopPropagation();出现在我的代码中。

有什么办法可以防止菜单显示?

摆弄演示:http: //jsfiddle.net/maniator/XJtpc/


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

4

2 回答 2

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;
        }
    });
});
​
于 2012-08-20T17:15:55.050 回答
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());

于 2021-04-04T17:44:29.850 回答