javascript - e.target 是上下文菜单可见时点击的主体

标签 javascript jquery mouseevent

我有这个事件:

$(document).on('click', function(e) {
   var $target = $(e.target);
   if ($target.is('.element')) {
      console.log('element');
   }
});

我有这个问题:

当我右键单击以显示上下文菜单,然后单击 .element(当上下文菜单可见时)时,e.targetbody 不是 Chrome 中的 .element

如何检测我是否点击了 .element

最佳答案

我已经通过添加这段代码解决了这个问题:

function inside(element, x, y) {
    var offset = element.offset();
    var width = element.outerWidth();
    var height = element.outerHeight();
    return (x > offset.left && y > offset.top &&
            x < (offset.left + width) && y < (offset.top + height));
}

$(document).on('click', function(e) {
   e = e.originalEvent;
   var inside_elements = $('.element').get().filter(function(element) {
       return inside(element, e.pageX, e.pageY);
   });
   if (inside_elements.length) {
      console.log('element');
   }
});

编辑:并找到了另一个解决方案:

$(document).on('click', function(e) {
   e = e.originalEvent;
   var node = document.elementFromPoint(e.pageX, e.pageY);
   var $target = $(node);
   if ($target.is('.element')) {
      console.log('element');
   }
});

EDIT2 很奇怪,当我尝试在 codepen 中重现问题时,这种情况并没有发生,也许是点击时文本区域的焦点/模糊。

关于javascript - e.target 是上下文菜单可见时点击的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46204845/

相关文章:

javascript - 为什么这个没有错误和警告的语句不完整?

jquery - 如何 append (或其他方法)大量 HTML 代码?

javascript - Firefox 的foreignObject 中未触发事件

visual-studio-2010 - 鼠标处理 : printing pixel location

javascript - 复选框启用/禁用、选中/取消选中以及单击按钮即可更改按钮文本

javascript - 如何处理 Service Worker 中的依赖关系?

javascript - jQuery - 最后一张幻灯片的间隔未执行 - 动画故障

python - 如何检测 Matplotlib PathCollection 中的哪个项目已被单击?

javascript - 使用Sinon.JS和Rewire时是否可以设置 `this`的值?

jquery - 试图理解一个 jquery 示例