Javascript 如何隐藏Firefox上下文菜单以显示我自己的菜单?
我使用div创建了一个菜单,当用户右键单击表的第一行时,该菜单必须出现: HTML CSS JSFiddle: 我无法在上面的小提琴中重现错误,但它发生在我的Firefox/Ubuntu上。(在fiddle中,控制台说“showMenu未定义”——这是jsfiddle.net中javascript的常见行为吗?因为函数在javascript面板上!) 现在发生的是:没有这条线Javascript 如何隐藏Firefox上下文菜单以显示我自己的菜单?,javascript,html,css,firefox,contextmenu,Javascript,Html,Css,Firefox,Contextmenu,我使用div创建了一个菜单,当用户右键单击表的第一行时,该菜单必须出现: HTML CSS JSFiddle: 我无法在上面的小提琴中重现错误,但它发生在我的Firefox/Ubuntu上。(在fiddle中,控制台说“showMenu未定义”——这是jsfiddle.net中javascript的常见行为吗?因为函数在javascript面板上!) 现在发生的是:没有这条线 div.style.display = 'block'; Firefox的上下文菜单不显示。这就是我想要的,我
div.style.display = 'block';
Firefox的上下文菜单不显示。这就是我想要的,我得到它是因为onContextMenu='returnfalse'
。但当我加上
div.style.display = 'block';
它同时显示我的div菜单和Firefox上下文菜单!为什么呢?我尝试了其他命令来隐藏上下文菜单,但它一直显示。我尝试了以下所有方法,单独和混合:
e.preventDefault();
if (event.stopPropagation)
event.stopPropagation();
event.cancelBubble = true;
return false;
那么,如何隐藏默认上下文菜单以显示我自己的菜单呢?您在一个
onmousedown
处理程序中显示菜单,并在oncontextmenu
处理程序中隐藏本机菜单。规范没有说明一个是否应该先于另一个运行
在Firefox中,首先运行onmousedown
处理程序,因此会显示自定义菜单,然后在出现的自定义菜单上运行oncontextmenu
。该元素中没有return false
,因此显示本机菜单
您需要在oncontextmenu
处理程序中触发自定义菜单:
<tr oncontextmenu="showMenu(event); return false;">
PS:导出JS选项卡中的showMenu功能,以便在该选项卡之外使用(
window.showMenu=showMenu
)。FYI,关于showMenu问题。。。控制台中的任何其他错误
?@MoshFeu在我的程序中没有任何错误。在JSFIDLE中,加载时会出现很多蓝色感叹号,但只有在我单击表格时才会出现此引用错误。@Rodrigo如果我必须猜测的话,这只是一个猜测。。。我认为这不起作用的原因是您成功地取消了子元素的上下文菜单,但父元素仍在启动它的第一个上下文菜单。如果您真的想让它轻松工作,可以为文档阻止它document.oncontextmenu=function(e){e.preventDefault();return false;}
它位于Javascript窗口右上角的齿轮下面。
div.style.display = 'block';
e.preventDefault();
if (event.stopPropagation)
event.stopPropagation();
event.cancelBubble = true;
return false;
<tr oncontextmenu="showMenu(event); return false;">