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;
}
});
});