jQuery:单个mouseenter/mouseleave处理程序

jQuery:单个mouseenter/mouseleave处理程序,jquery,mouseenter,mouseleave,event-delegation,Jquery,Mouseenter,Mouseleave,Event Delegation,我需要跟踪页面上所有元素的mouseenter/mouseleave事件 直观地说,为它编写的代码是: $(window).on('mouseenter mouseleave', function(e) { console.log(e.target, e.type); // ... }); 但每次mouseenter发生在子元素上时,它都会触发mouseleave事件,从而抵消mouseenter/mouseleave的所有优点,即它的工作方式类似于mouseover/mouseout

我需要跟踪页面上所有元素的mouseenter/mouseleave事件

直观地说,为它编写的代码是:

$(window).on('mouseenter mouseleave', function(e) {
  console.log(e.target, e.type);
  // ...
});
但每次mouseenter发生在子元素上时,它都会触发mouseleave事件,从而抵消mouseenter/mouseleave的所有优点,即它的工作方式类似于mouseover/mouseout

有没有一种方法可以在不将处理程序直接附加到所有元素的情况下处理此问题

这看起来像jQuery bug吗?因为从我所知道的和我读过的jQuery文档来看,上面的代码应该可以正常工作

要使用的JSBin:


编辑:这与预期一样有效:

子元素包含在所有定义中,不是吗

如果可能,为所需元素指定一个类,如
class=“mouse\u active”
或者使用合适的选择器

然后

$(window).on('mouseenter mouseleave','.mouse_active', function(e) {
  console.log(e.target, e.type);
  // ...
});

您仍然可以附加一个处理程序这是正确的方法:

$(window).hover(
   function(){
      // mouse enter function...
   },
   function(){
      // mouse leave function...
   }
);

您的意思是需要跟踪所有元素吗?例如,每一个
,等等?它工作正常,但当鼠标进入一个新元素时,它会离开另一个元素,就像您所期望的那样!您希望跟踪所有元素的mouseenter/leave,但它会为每个子元素激发。。。这不是你想要的吗?你能描述一下你想要达到的目标吗?无论如何,在Chrome中,jsbin对我来说就像预期的那样工作。我不希望在我从一个元素移动到它的子元素时触发“mouseleave”。这就是“mouseenter/mouseleave”事件的全部内容。然后删除
mouseleave
部分?不可能。我不能修改DOM(例如,想象一个浏览器插件)关于文档结构的任何信息?也许可以找到一些合适的选择逻辑您是否只针对顶级元素?不,我需要针对DOM树中的每个元素。这不是正确的方法,它与OP的代码完全相同,因为hover()只是mouseenter和mouseleave的jQuery快捷方式?