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()
是绑定到mouseenter
和mouseleave
简写,并且本身不是一个事件。
试试这个:
$('#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
而是一个速记方法,它绑定两个事件, mouseenter
和mouseleave
处理程序,因此不能与.one
(如此处所示)。 要复制hover
的行为,你必须有两个绑定,它们都只触发一次,如下所示:
$("#foo").one("mouseenter mouseleave", function(e){ $(this).toggleClass("bar"); });
以上内容与以下内容相同,但只触发一次:
$("#foo").hover(function(){ $(this).toggleClass("bar"); });
如果要在mouseenter
和mouseleave
上执行不同的操作,则需要绑定单独的处理程序:
$("#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(); }); });