如何在第二次单击时锁定功能

时间:2012-05-19 14:02:31

标签: javascript jquery event-handling

我有一个侧边栏,可以在悬停时展开。

因为扩展,折叠可能会打扰,有时我想在有人点击侧边栏时解除悬停。

底部的代码用于第一次取消绑定,但第二次点击再次启用悬停不起作用:

    $('.action').click(function(){
        $(this).unbind('mouseenter').unbind('mouseleave');
        $(this).click(function(){
            $(this).bind('mouseenter').bind('mouseleave');
        });
    });

那么如何在锁定时再次绑定悬停(请不要施工)。

此致

2 个答案:

答案 0 :(得分:1)

您需要绑定实际事件.bind('mouseenter', function () { /* whatever */ });。 jQuery不会自动知道你想重新绑定已经存在的内容。如果需要,可以使用命名函数,这样就不必重写它。

答案 1 :(得分:1)

$('.action').on('mouseenter mouseleave', doStuffOnHover); //initial handler

var bound = true;

$('.action').on('click', function(){
      $(this)[bound ? 'off' : 'on']('mouseenter mouseleave', doStuffOnHover);
      bound=bound ? false:true;
});

function doStuffOnHover() {
   //do stuff here
}

FIDDLE

如果在mouseenter / leave上做不同的事情,你当然需要两个功能。