jQuery – 在hover时使用.one()

有没有办法让hoverfunction只执行一次? 这就是我目前正在尝试的:

$('#ask').live('hover', function() { $('#homesearch-after').hide(300); $.doTimeout( 300, function() { hideClosedSearchLink(); showHomeSearch(); }); }); 

但那不起作用。 我怎么才能让这个hover激活一次?

我尝试用.one和.bind改变.live ……导致虚无。

你已经自己回答了,使用.one() (不是.live() )。

但正如lasseespeholt在评论中指出的那样, .hover()是绑定到mouseentermouseleave简写,并且本身不是一个事件。

试试这个:

 $('#ask').one('mouseenter', function() { $('#homesearch-after').hide(300); $.doTimeout( 300, function() { hideClosedSearchLink(); showHomeSearch(); }); }); 

如果仍然无效,请尝试使用好的’ .hover() ,然后在完成后立即使用.unbind()

 $('#ask').hover(function() { $('#homesearch-after').hide(300); $.doTimeout( 300, function() { hideClosedSearchLink(); showHomeSearch(); }); // Again taking into account what lasseespeholt said $(this).unbind('mouseenter mouseleave') }); 

hover不是一个真实的event而是一个速记方法,它绑定两个事件, mouseentermouseleave处理程序,因此不能与.one (如此处所示)。 要复制hover的行为,你必须有两个绑定,它们都只触发一次,如下所示:

 $("#foo").one("mouseenter mouseleave", function(e){ $(this).toggleClass("bar"); }); 

以上内容与以下内容相同,但只触发一次:

 $("#foo").hover(function(){ $(this).toggleClass("bar"); }); 

如果要在mouseentermouseleave上执行不同的操作,则需要绑定单独的处理程序:

 $("#foo").one("mouseenter", function(e){ $(this).addClass("bar").text("Over"); }).one("mouseleave", function(e){ $(this).removeClass("bar").text("Out"); }); 

我可以从您的代码中读到的是,您只想绑定mouseenter事件,如下所示:

 $('#ask').one('mouseenter', function() { $('#homesearch-after').hide(300); $.doTimeout( 300, function() { hideClosedSearchLink(); showHomeSearch(); }); });