javascript - Firefox 与 contextmenu 事件同时触发 click 事件

标签 javascript firefox

接下来的代码记录窗口对象( FIDDLE )上触发的事件:

var logEvent = (function() {
var count = 1,
    timer = 0,
    buffer = function() {
        clearTimeout(timer)
        timer = setTimeout(function() {
            count++
        }, 30)
    }
return function(type, e) {
    buffer();
    console.log(count + '. ------- ' + type + ' ------')
    console.log('type:   ' + e.type)
    console.log('button: ' + e.button)
    console.log('detail: ' + e.detail)
}
})()
window.addEventListener('click', function(e) {
logEvent('CLICK', e)
})
window.addEventListener('contextmenu', function(e) {
logEvent('CONTEXTMENU', e)
})
<body>
<div>
    Click here
</div>
</body>
例如,如果我右键单击 body 元素,我将在控制台上获得下一个登录信息:

适用于 Firefox 54.0.1

  1. ------- CLICK ------
  type:   click
  button: 2
  detail: 1
  1. ------- CONTEXTMENU ------
  type:   contextmenu
  button: 2
  detail: 1

适用于 Chrome 62.0.3165.0

  1. ------- CONTEXTMENU ------
  type:   contextmenu
  button: 2
  detail: 0

我不知道 Firefox 出了什么问题,可能是浏览器或操作系统配置不正确。有同样的问题吗,请问如何解决?

最佳答案

我的 Firefox 上也出现这种情况。

这是一个已注册的错误,请参阅 https://bugzilla.mozilla.org/show_bug.cgi?id=184051

您可以通过检查点击处理程序中的 e.button 值来解决这个问题。

window.addEventListener('click', function(e) {
    //when e.button==2, it's a right click, when 0, it's a left click
    logEvent('CLICK.' + e.button, e);
    if(e.button===2){
        //do context menu stuff
    }
})

关于javascript - Firefox 与 contextmenu 事件同时触发 click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370448/

相关文章:

javascript - 浏览器在设置 document.location 时会转义一些 URL 无效字符,但不会转义其他字符

javascript - dojo 复选框对象和 ArcGIS JS api

javascript - 从 Jquery 1.11.0 和 Jquery UI 1.10.4 升级到 Jquery 3.x 和 Jquery UI 1.12.x 时测试向后兼容性问题

javascript - 使用 Javascript 将 div 居中

html - child 的边缘影响祖先包括 body

css - Firefox 方向垂直的 HTML5 输入类型范围?

javascript - 检测 Firefox 插件何时被阻止

javascript - 为什么 funcname() = value;有效的语法?

javascript - 创建对象并将它们链接到解析和 JS 中的用户

javascript - Firefox 在文本上拖动时触发 dragleave