0

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

直观地编写的代码是:

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

但是每次 mouseenter 发生在子元素上时它都会触发 mouseleave 事件,从而抵消了 mouseenter/mouseleave 的所有好处,即它的工作方式类似于 mouseover/mouseout。

有没有办法在不将处理程序直接附加到所有元素的情况下处理这个问题?

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

JSBin 玩:http: //jsbin.com/axuluc/2/

编辑:这按预期工作:http: //jsbin.com/axuluc/9/

4

2 回答 2

1

好吧,所有定义中都包含子元素,不是吗?

如果可能的话,给所需的元素一个类,class="mouse_active" 或者使用适当的选择器。

然后...

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

你仍然附加一个处理程序

于 2013-03-14T12:20:13.780 回答
0

这是正确的方法:

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

http://api.jquery.com/hover/

于 2013-03-14T12:44:10.843 回答