2012-03-23 74 views
0

这是一个相当常见的模式,它有一个对话框,菜单或其他HTML元素,并在其中弹出一个链接以响应点击。例如,如果您单击Stack Overflow编辑框上方的橙色问号,则会为“链接”,“图像”等添加一堆链接。然后,当再次单击问号时,菜单将消失。是否有可能检测到右键单击浏览器上下文菜单上的左键单击?

我有一个类似的设置,只有当用户单击除菜单以外的任何地方时,我只想让菜单消失。这不难($(document.body).click(handleClickElsewhere))。但是,什么是硬的是以下情况:

  1. 用户点击弹出菜单
  2. 用户右键点击菜单中的其中一个链接(使浏览器右键菜单出现)
  3. 在浏览器的上下文菜单上
  4. 用户左键点击,“打开新的标签页”菜单项
  5. ,用户被引导到一个新的选项卡中的链接,但
  6. 菜单将保持打开回到原来的页面上

关于上面的难题就是我想在这种情况下关闭菜单;当用户返回到原始选项卡时,它看起来很傻,菜单仍处于打开状态。不幸的是,似乎没有任何方法可以检测到用户点击了“在新标签中打开”,因此我无法关闭菜单作为回应。我可以关闭菜单以响应用户的右键单击(上面的步骤#2),但是他们将无法选择“在新选项卡中打开”,因为链接将消失。

我试过jQuery的click,mouseup,mousedown和contextmenu事件,但他们都没有发现这种情况。

有其他人想出了一个解决这个?或者,如果不可能,比我更有见识的人能够明确地解释为什么?我的猜测是,浏览器并没有告诉你有关第4步中的点击,但我没有真正的猜测。

回答

1

你可以检查是否the window lost focus,之后做出适当的反应(这是关闭菜单)

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

+0

这是一个好主意,但该方法有一个小问题:在我的浏览器中,至少当您选择“在新标签中打开“它不会立即切换到该选项卡。所以,当用户点击新选项卡时,菜单应该消失,直到它出现。如果这是可能的最佳结果,但是如果有任何方法可以避免它会很好。 – machineghost 2012-03-23 23:03:27

+0

最近的人可以得到的是检测上下文菜单事件http://stackoverflow.com/a/4909687/575527但不是被点击的项目。 – Joseph 2012-03-23 23:14:01

+0

这就是我所害怕的;谢谢你的重点建议:) – machineghost 2012-03-24 00:58:50

相关问题