Javascript 如何隐藏Firefox上下文菜单以显示我自己的菜单?

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创建了一个菜单,当用户右键单击表的第一行时,该菜单必须出现:

HTML

CSS

JSFiddle:

我无法在上面的小提琴中重现错误,但它发生在我的Firefox/Ubuntu上。(在fiddle中,控制台说“showMenu未定义”——这是jsfiddle.net中javascript的常见行为吗?因为函数在javascript面板上!)

现在发生的是:没有这条线

    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;">