菜单mouseenter mouseleave click

时间:2012-11-27 13:59:57

标签: javascript jquery menu

任何人都可以帮助我吗?我想要一个带有动画的下拉菜单,其中包含mouseenter和mouseleave事件,但是当鼠标输入后单击时,我希望子菜单保持可见,直到在页面中的任何位置新单击(在示例中仅在正文中)。在第二次点击之后(与mouseleave相同的动画)我想要mouseenter和mouseleave .on就像我们开始时一样。

$('#menu > li').on('mouseenter',function(){
    //mouseenter handler
});

$('#menu > li').on('mouseleave',function(){
    //mouseleave handler
});
$('#menu > li').toggle(
  function () {
  $('#menu > li').off('mouseenter mouseleave');
  },
  function () {
  //mouseleave handler
  });
$('body').click(function(){
  //same mouseleave handler
});

我不知道如何在第二次点击后启用mouseenter / mouseleave。对不起,谢谢。

1 个答案:

答案 0 :(得分:1)

使用事件委派可以大大简化:

$('document').on("click",'#menu > li', function() {
    $('#menu > li').off('mouseenter mouseleave');
});

$('document').on("click",':not(#menu > li)', function() {
    $('#menu > li').on('mouseenter', function(){
         //your mouseenter handler goes here
    });
    $('#menu > li').on('mouseleave', function(){
         //your mouseleave handler goes here
    });
});

这在语义上等同于:

If a click happens on a menu item, unbind mouse enter/leave events

If a click happens on a non menu item, bind mouse enter/leave events