jQuery unbind和bind

时间:2016-11-08 06:12:21

标签: javascript jquery

案例是:当我将鼠标悬停在链接上时,某些任务应该发生,当我离开区域/鼠标离开时,链接的悬停应该保持禁用状态1秒钟再次工作。

DEMO PLNKR:

http://plnkr.co/edit/m6SnDzuo2MA5hoYUEoPc?p=preview

以下是我的方法

$("a").hover(function (event) {
    event.preventDefault();
    alert('hovered');
}, function () {
    $("a").unbind('mouseenter mouseleave');
    setTimeout(function () {
            $("a").bind('mouseenter mouseleave');
    }, 1000);       
});

因此,每当发生mouseleave事件时,我都会解除绑定mouseentermouseleave,然后解除绑定setTimeout并重新绑定它们。

所以,现在它解除了很好的解决方案,但是一秒钟后事件就不会重新绑定了。

如果我在这里做错了什么,请帮忙。

1 个答案:

答案 0 :(得分:2)

首先绑定到hover,当光标离开时,您将unbind mouseentermouseleave。但是你没有为它分配任何功能。你真的想重新分配给之前的hover - 事件吗?

在您给出的示例中,未设置handler

来自docs

  

eventType

     

类型:String包含一个或多个DOM事件类型的字符串,例如“click”或“submit”或自定义事件名称。

     

<强>处理程序

     

类型:Function(Event eventObject)每次触发事件时执行的函数。

function onHover(){
  alert('hovered');
}

function onHoverLeft(){
  console.log('onHoverLeft called');
  $("a").off('mouseenter mouseleave');
    setTimeout(function () {
      console.log('setTimeout is done. Will rebind hover now.');
      $("a").hover(onHover, onHoverLeft);
    }, 2000);  
}
$("a").hover(onHover, onHoverLeft);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Foo</a>