我知道keyboard menu key是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语句中,但,即使 <仍然显示上下文菜单em>两个 event.preventDefault();
和event.stopPropagation();
都出现在我的代码中。
有没有办法阻止显示菜单?
小丑的演示:http://jsfiddle.net/maniator/XJtpc/
对于那些不知道“菜单”键是什么的人:
答案 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 的解决方案开始,但发现它可以比这简单一点。
keydown
事件处理程序。 e.preventDefault
不需要。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());