【问题标题】:Is it possible to detect a left-click on a right-click browser context menu?是否可以检测到右键单击浏览器上下文菜单上的左键单击?
【发布时间】:2012-04-08 11:48:29
【问题描述】:

对话框、菜单或其他带有链接的 HTML 元素在响应点击时弹出,这是一种相当常见的模式。例如,如果您单击 Stack Overflow 编辑框上方的橙色问号,它会为“Links”、“Images”等添加一堆链接。然后,当您再次单击问号时,菜单就会消失。

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

  1. 用户单击以调出菜单
  2. 用户右键单击菜单中的一个链接(使浏览器上下文菜单出现)
  3. 用户左键单击浏览器上下文菜单的“在新选项卡中打开”菜单项
  4. 用户被带到新选项卡中的链接,但是
  5. 菜单在原始页面上保持打开状态

上面的困难部分是我想在这种情况下关闭菜单;当用户返回到他们原来的选项卡并且菜单仍然打开时,它看起来有点傻。不幸的是,似乎没有任何方法可以检测到用户单击了“在新选项卡中打开”,因此我无法关闭菜单作为响应。我可以关闭菜单以响应用户的右键单击(上面的第 2 步),但随后他们将无法选择“在新选项卡中打开”,因为链接将消失。

我尝试过 jQuery 的 click、mouseup、mousedown 和 contextmenu 事件,但似乎没有一个能捕捉到这种情况。

还有其他人想出解决办法吗?或者,如果不可能,比我更有知识的人可以明确解释原因吗?我的猜测是浏览器只是没有告诉你第 4 步中的点击,但我没有这个猜测的真实依据。

【问题讨论】:

    标签: javascript mouseevent contextmenu


    【解决方案1】:

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

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

    【讨论】:

    • 这是个好主意,但是这种方法有一个小问题:至少在我的浏览器中,当您选择“在新标签中打开”时,它不会立即切换到该标签。因此,尽管一旦用户单击新选项卡,菜单就会消失,但直到那时它仍然存在。如果这是最好的结果,那没关系,但如果有任何方法可以避免这种情况,那就太好了。
    • 最接近的是检测上下文菜单事件stackoverflow.com/a/4909687/575527,而不是被点击的项目。
    • 这就是我害怕的;不过感谢您的重点建议:)
    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多