Javascript MDL菜单用鼠标右键单击打开

Javascript MDL菜单用鼠标右键单击打开,javascript,jquery,google-chrome,firefox,material-design-lite,Javascript,Jquery,Google Chrome,Firefox,Material Design Lite,我制作此小提琴是为了使调试更容易-> JS: HTML: 更多 显示 显示2 显示3 显示4 我想做的是当用户用鼠标右键单击菜单按钮时,禁用默认浏览器上下文菜单并触发默认的鼠标左键单击(这样mdl上下文菜单就会打开) 要重新创建问题,请执行以下操作: 1) 首先在Chrome中打开fiddle,用鼠标右键点击菜单图标(3个点)——注意它是如何很好地打开菜单的; 2) 现在在Firefox中打开同样的小提琴,做同样的动作——注意菜单是如何打开和立即关闭的;(如果用鼠标右键单击并按住,它将保

我制作此小提琴是为了使调试更容易->

JS:

HTML:


更多
    显示 显示2 显示3 显示4
我想做的是当用户用鼠标右键单击菜单按钮时,禁用默认浏览器上下文菜单并触发默认的鼠标左键单击(这样mdl上下文菜单就会打开)

要重新创建问题,请执行以下操作:

1) 首先在Chrome中打开fiddle,用鼠标右键点击菜单图标(3个点)——注意它是如何很好地打开菜单的; 2) 现在在Firefox中打开同样的小提琴,做同样的动作——注意菜单是如何打开和立即关闭的;(如果用鼠标右键单击并按住,它将保持打开状态。此外,如果用鼠标右键单击,然后将光标移动到打开的菜单,它也将保持打开状态)

我找不到解决方法,因为这个bug(?)对我来说真的很奇怪。也许Firefox有些东西你们知道,我不知道

通过定位菜单可以克服这个问题,这样当它被打开时,它会在鼠标光标所在的位置被打开——然后它不会消失,但这不是一个普通的修复程序,更像是一个“丑陋的热修复程序”


感谢您对此进行调查,并进行了很好的调试(如果需要)。

我意识到这个问题现在真的处于休眠状态,我已经在Firefox中尝试过,这个问题似乎不再发生,但我相信我已经找到了原因和答案

TL;DR-在您正在创建的新菜单上检测到另一次右键单击。

上下文:我的情况略有不同,当用户右键单击画布类型区域时,我希望在鼠标位置弹出一个窗口。我创建了右键单击菜单,一切正常,直到我将菜单与鼠标的实际位置对齐,然后我也会得到默认的上下文菜单(与您描述的问题相同)。所以要澄清的是,当菜单位于屏幕左上角时,代码起作用;当它位于鼠标位置时,代码不起作用 我的情况给了我一个提示——当菜单出现在光标下时问题就出现了——那么这里发生了什么呢。我在所有div中添加了一堆额外的侦听器,发现除了我在空间上的首次mousedown事件外,新显示的菜单上也触发了一个“mouseup”——我猜,如果相应的mousedown只比我的浏览器早几毫秒(我的例子中是chrome,奇怪的是)在这个元素上单击鼠标右键将其拼接在一起。增加了:

$(this).bind('contextmenu', function() {
    return false;
});
到mouseup事件(记住这是在实际的菜单项上-您的
ul.mdl菜单
),并且一切都按预期工作


意识到对于OP的问题来说可能已经太晚了,但如果其他人偶然发现这个问题,我希望它能有所帮助

我意识到这个问题现在真的处于休眠状态,我已经在Firefox中尝试过了,这个问题似乎不再发生,但我相信我已经找到了原因和答案

TL;DR-在您正在创建的新菜单上检测到另一次右键单击。

上下文:我的情况略有不同,当用户右键单击画布类型区域时,我希望在鼠标位置弹出一个窗口。我创建了右键单击菜单,一切正常,直到我将菜单与鼠标的实际位置对齐,然后我也会得到默认的上下文菜单(与您描述的问题相同)。所以要澄清的是,当菜单位于屏幕左上角时,代码起作用;当它位于鼠标位置时,代码不起作用 我的情况给了我一个提示——当菜单出现在光标下时问题就出现了——那么这里发生了什么呢。我在所有div中添加了一堆额外的侦听器,发现除了我在空间上的首次mousedown事件外,新显示的菜单上也触发了一个“mouseup”——我猜,如果相应的mousedown只比我的浏览器早几毫秒(我的例子中是chrome,奇怪的是)在这个元素上单击鼠标右键将其拼接在一起。增加了:

$(this).bind('contextmenu', function() {
    return false;
});
到mouseup事件(记住这是在实际的菜单项上-您的
ul.mdl菜单
),并且一切都按预期工作

意识到对于OP的问题来说可能已经太晚了,但如果其他人偶然发现这个问题,我希望它能有所帮助

$(this).bind('contextmenu', function() {
    return false;
});