Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止菜单键显示上下文菜单_Javascript_Events_Contextmenu - Fatal编程技术网

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

Javascript 阻止菜单键显示上下文菜单,javascript,events,contextmenu,Javascript,Events,Contextmenu,我知道密码是keyCode===93 因此,我有以下代码: $(window).on("keydown", document, function(event){ if (event.keyCode === 93) { //context menu console.log("context menu key", event); event.preventDefault(); event.stopP

我知道密码是
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;
    }
});
尽管事件会触发,并且
控制台
会记录在if语句中,但是上下文菜单仍然会显示,即使两者都触发
事件.preventDefault()
事件.stopPropagation()存在于我的代码中

有没有办法阻止菜单显示

小提琴演示:


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


这有点愚蠢,但似乎有效:)


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

台阶
  • 注册
    keydown
    事件处理程序<代码>e.preventDefault
  • 不需要
  • 注册
    contextmenu
    事件处理程序,只需执行
    e.preventDefault()
  • 例子:
    //JavaScript
    //注册“ContextMenu”键事件处理程序
    document.querySelector('body')。onkeydown=(e)=>{
    如果(e.key==='ContextMenu'){
    //做点什么
    }
    }
    //阻止“contextmenu”事件默认操作
    document.querySelector('body').oncontextmenu=(e)=>e.preventDefault();
    //jQuery
    //注册“ContextMenu”键事件处理程序
    $('body')。on('keydown',(e)=>{
    如果(e.key==='ContextMenu'){
    //做点什么
    }
    });
    //阻止“contextmenu”事件默认操作
    $('body').on('contextmenu',(e)=>e.preventDefault());
    
    是否允许右键单击上下文菜单工作?如果不这样做,则应使用“绑定到上下文菜单事件”而不是“按下键”。现代浏览器的设置可能会阻止您阻止上下文菜单。@aquinas我希望右键单击菜单正常工作。我不想阻止…你能记录event.keyCode来确认你的键盘确实发送了keycode93吗?@Neal你的问题不清楚,你说事件触发,对我来说意味着你的按键被触发,但不意味着你的if语句被触发。哇。。。。巧妙的:-)。。。。。嗯,现在我必须试着找出如何不玷污全局范围…它不在全局范围内,看看我是如何将它包装在一个jquery就绪函数中的?是的,但这些事件实际上不需要在就绪函数中,因为它们是委托的…嗯,是的,我只是在使用jquery时倾向于这样包装,但是是的,可以只做(function(){})()把戏。不管你喜欢什么。只是从测试(虽然这很难,因为我没有菜单键)这不会阻止下一个上下文菜单(右键单击),如果他们打开了它,并且没有按下中间的任何键?从键盘打开oncontextmenu事件时,某些浏览器可能不会触发该事件?还是他们?这在我这方面很难测试。
    $(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;
            }
        });
    });
    ​