是否可以检测到右键单击浏览器上下文菜单上的左键单击?

时间:2012-03-23 22:31:27

标签: javascript mouseevent contextmenu

这是一个相当常见的模式,它有一个对话框,一个菜单或一些其中包含链接的HTML元素,以响应点击。例如,如果单击“堆栈溢出”编辑框上方的橙色问号,则会为"链接","图像"等添加一堆链接。然后,当您单击时问号再次出现,菜单就消失了。

我有类似的设置,只是当用户点击菜单以外的任何地方时,我希望菜单消失。这并不难($(document.body).click(handleClickElsewhere))。但是,以下情况很难:

  1. 用户点击以显示菜单
  2. 用户右键单击菜单中的一个链接(显示浏览器上下文菜单)
  3. 用户左键单击浏览器的上下文菜单,在"在新标签页中打开"菜单项
  4. 用户将转到新标签页中的链接,但
  5. 菜单在原始页面上保持打开状态
  6. 关于上述内容的难点在于我希望在这种情况下关闭菜单;当用户返回其原始选项卡时,它看起来有点愚蠢,菜单仍然打开。不幸的是,似乎没有任何方法可以检测到用户点击了#34;在新标签中打开",因此我无法关闭菜单作为回应。我可以关闭菜单以响应用户的右键点击(上面的步骤2),但随后他们无法选择"在新标签中打开"因为链接将消失。

    我已经尝试过jQuery的click,mouseup,mousedown和contextmenu事件,但似乎没有人能够抓住这种情况。

    还有其他人想出解决方案吗?或者,如果不可能,那么比我更有知识的人能否明确地解释原因?我的猜测是浏览器并没有告诉你步骤#4中的点击,但我没有真正的猜测基础。

1 个答案:

答案 0 :(得分:1)

您可以检查是否the window lost focus,并在此之后做出适当的反应(即关闭菜单)

但这假设默认情况下浏览器设置为“切换到新标签页”。某些用户可能会选择在后台打开新选项卡的设置,因此主窗口不会失去焦点,此方法将不起作用。 (但是嘿,如果我还在看它的话,谁想关闭菜单呢?)