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 に答える