2016-11-08 89 views
0

这种情况是:当我将鼠标悬停在链接上时,应该发生一些任务,并且当我离开区域/ mouseleave时,链接悬停应该保持禁用状态1秒钟,然后再次运行。jQuery解绑并绑定

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);  
}); 

所以,当鼠标离开事件发生时,我解除绑定mouseentermouseleave,然后用setTimeout并再次绑定它们。

所以,现在它解除了罚款,但一秒后事件不重新绑定。

如果我在这里做了任何错误,请帮忙。

回答

2

首先你绑定到hover,并且当光标离开时你会unbindmouseentermouseleave。但是你没有为它分配任何功能。你真的想重新分配到以前的hover -event吗?

在你给出的例子中你没有设置handler

来自docs

EVENTTYPE

类型:String一个包含一个或多个DOM事件类型,如 “点击” 或 “提交”,或自定义事件名称的字符串。

处理

类型:Function(事件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>

+0

是。其实我希望在mouseleave悬停事件的链接应该不会工作1秒。之后,如果我徘徊它应该像以前执行 –

+0

@MarkWilson - 我已经编辑了片段。 – smoksnes

+0

谢谢。做了这份工作。但我只是无法理解它是如何重写在片段中。 '$(“a”)。off('mouseenter mouseleave');'解除绑定。然后在1秒后,你只是再次悬停。 –