jQuery:单个mouseenter / mouseleave处理程序

时间:2013-03-14 12:11:40

标签: 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一样工作。

有没有办法处理这个问题而不直接将处理程序附加到所有元素?

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

使用JSBin:http://jsbin.com/axuluc/2/

修改:按预期方式运作:http://jsbin.com/axuluc/9/

2 个答案:

答案 0 :(得分:1)

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

尽可能为所需的元素提供类class="mouse_active" 或使用适当的选择器。

则...

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

并且您仍然附加一个处理程序

答案 1 :(得分:0)

这是正确的方法:

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

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