javascript - MDL菜单点击鼠标右键打开bug

标签 javascript jquery google-chrome firefox material-design-lite

我制作这个 fiddle 是为了使调试更容易 -> https://jsfiddle.net/ayo8voh2/

JS:

jQuery('.edit-view-submenu').mousedown(function(event) {
    if (event.which === 3) { // right mouse clicked
    // disable default menu
    jQuery(this).bind('contextmenu', function() {
      return false;
    });

    jQuery(this).find('.mdl-button').trigger('click');
  }
});

HTML:

            <div class="edit-view-submenu">
                <button id="edit-context"
                        class="mdl-button mdl-js-button mdl-button--icon float-right">
                    <i class="material-icons">more_vert</i>
                </button>

                <ul class="mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect"
                    for="edit-context">
                    <li class="mdl-menu__item">Show</li>
                    <li class="mdl-menu__item">Show 2</li>
                    <li class="mdl-menu__item">Show 3</li>
                    <li class="mdl-menu__item">Show 4</li>
                </ul>
            </div>

我想做的是,当用户用鼠标右键单击菜单按钮时,禁用默认浏览器上下文菜单并触发默认的鼠标左键单击(以便打开 mdl 上下文菜单)。

要重新创建问题:

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

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

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

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

最佳答案

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

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

对于上下文:我的情况略有不同,因为我希望当用户右键单击 Canvas 类型区域时在鼠标位置弹出窗口。我创建了右键单击菜单,一切工作正常,直到我将菜单与鼠标的实际位置对齐 - 然后我也会得到默认的上下文菜单(与您所描述的问题相同)。所以澄清一下 - 当菜单位于屏幕左上角时代码可以工作 - 当菜单位于鼠标位置时代码不起作用 我的情况给了我提示 - 当菜单出现在光标下方时就会出现问题 - 那么这里发生了什么。我向所有 div 添加了一堆额外的监听器,发现除了空间上的初始 mousedown 事件外,新显示的菜单上还触发了一个“mouseup” - 我猜想,鉴于相应的 mousedown 只有几毫秒早些时候,我的浏览器(在我的情况下是 Chrome 浏览器很奇怪)通过右键单击该元素将其拼凑在一起。添加了:

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

到 mouseup 事件(记住这是在实际的菜单项上 - 您的 ul.mdl-menu),一切都按预期工作。

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

关于javascript - MDL菜单点击鼠标右键打开bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36430001/

相关文章:

javascript - 如何在 SVG 中包含 Bootstrap Glyphicon

javascript - 我在使用毯子的 Mocha 代码覆盖率中获得 0% 覆盖率 0 SLOC

javascript - 为 CSS3 翻转动画选择特定元素的 jQuery 问题?

javascript - 限制Firebase中的有序列表

jQuery 工具提示 : Attaching to some anchor tags only

html - 简单的 HTML 网站在 Firefox、Safari 和 IE 中未按预期呈现

html - 没有 JS 的可点击 HTML/CSS 下拉菜单在 Firefox 中有效,但在 Chrome 中无效

javascript - 是否有最小化版本的 jQuery 元素选择库?

javascript - 垂直和水平对齐文本链接跨越背景图像

javascript - 如何在 chrome 控制台中使用 let 等 ES6 语法?