Javascript 如何在元素上触发浏览器关联菜单。(就像用户右键单击一样)

Javascript 如何在元素上触发浏览器关联菜单。(就像用户右键单击一样),javascript,contextmenu,Javascript,Contextmenu,我需要通过javascript触发浏览器(即Firefox、Safari等)上下文菜单的打开。我试图解决的问题是,当右键单击覆盖的元素时,它下面的元素将显示其上下文菜单。因此,如果顶部元素是一个标签,当您右键单击时,我需要显示下面输入元素的上下文菜单 我知道如何防止标签的上下文菜单显示,但我不知道如何任意打开上下文菜单 感谢您的帮助 很抱歉告诉你这个不幸的消息,但这是用Javascript做不到的。我不想让你失望,恰恰相反,特别是因为你回答了我自己的问题:) 我不认为浏览器的contect菜单可

我需要通过javascript触发浏览器(即Firefox、Safari等)上下文菜单的打开。我试图解决的问题是,当右键单击覆盖的元素时,它下面的元素将显示其上下文菜单。因此,如果顶部元素是一个标签,当您右键单击时,我需要显示下面输入元素的上下文菜单

我知道如何防止标签的上下文菜单显示,但我不知道如何任意打开上下文菜单


感谢您的帮助

很抱歉告诉你这个不幸的消息,但这是用Javascript做不到的。

我不想让你失望,恰恰相反,特别是因为你回答了我自己的问题:)

我不认为浏览器的contect菜单可以通过网页上的普通脚本访问

如果你所要求的是可行的,那么浏览器制造商可能会认为这是一个bug,并消除这种行为。在跨浏览器的情况下,这种行为现在不太可能出现

为什么不捕获鼠标事件,并且每当鼠标直接位于下面要显示关联菜单的元素区域时,将覆盖元素推到下面,否则将推回到顶部

这是我能想到的一种可能性,基本上是根据鼠标位置显示/暴露隐藏的元素。就像在覆盖层上切一个洞

或者,为什么不将文本字段设置为透明,并将覆盖层完全放置在文本字段下方

如果这在技术上不起作用,那么至少你在针对目标浏览器提交bug或增强方面是有意义的


BTW,如果用户右键直接点击插入符号的位置,上下文菜单实际上会起作用,所以这可能是你考虑的另一个漏洞。

< P>我有一个可能适合你需要的解决方案。它还不完美,我只在一些浏览器(Fox3.6、IE7、IE8、Chrome4、xp上的Safari3)中做了一些快速测试。它需要调整和改进,但这只是一个开始。基本上,我们的想法是删除鼠标右键单击时的标签,以便mouseup事件命中所需字段,从而在相关字段上启动上下文菜单

// Remove the contextmenu from "In-Field" Labels
base.$label.bind("contextmenu",function(e){
    return false;
}); 

// Detect right click on "In-Field" label:
// hide label on mousedown so mouseup will target the field underneath.
base.$label.mousedown(function(e){          
    if ( e.which == 3 ){
        var elLbl = $(this); 
        elLbl.hide();
        var elFid = $(this).attr("for");
        // bind blur event to replace the label when we are done.
        $("#" + elFid ).bind("blur.infieldlabel",function(){                    
            elLbl.show();
            $("#" + elFid ).unbind("blur.infieldlabel");                    
        });             
        return false;
    }
}); 

IE和Safari浏览器遇到了一个奇怪的问题,在标签再次显示之前,你需要点击两次进入和退出(我认为这与事件计时有关)。通过查看代码,您可以很容易地了解为什么会发生这种情况。也注意到狐狸在粘贴到野外后有时会出现轻微的小故障,在模糊的标签上出现了一瞬间,而它不应该出现。如果您决定将此方法合并到代码中,这应该是一件非常简单的事情来纠正。

如果我是您,我不会尝试以这种方式进行攻击。我可能想了解为什么会显示输入框的上下文菜单而不是标签。你能提供更多的细节吗?抱歉,在阅读完问题后删除了它。你可以在这里看到我的插件:并尝试右键单击文本字段的“内容”。如果我不能触发浏览器上下文菜单,它会使这个插件的使用受到一定的限制。。。。嗯,我没注意到问题,所以。。。最后的答案是什么?我希望这不是答案。我要让它再开一会儿。。。。以防万一。:)是的,如果我是你,我会让它开着。所有的想法都很好。我认为在新版本中,我将添加对在输入元素下面显示标签的支持,因为这将解决这个问题。这仅仅意味着包装元素需要为输入元素或文本区域提供背景色。不过应该有用!