有没有办法让悬停功能只执行一次?这就是我目前正在尝试的:
$('#ask').live('hover', function() {
$('#homesearch-after').hide(300);
$.doTimeout( 300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
Run Code Online (Sandbox Code Playgroud)
但那不起作用.我怎么才能让这个悬停激活一次?
我尝试用.one和.bind改变.live ......导致虚无.
Bol*_*ock 11
你已经回答了自己,使用.one()(不是.live()).
但随着lasseespeholt只是在评论中指出,.hover()是简写形式,结合mouseenter和mouseleave,而不是事件本身.
试试这个:
$('#ask').one('mouseenter', function() {
$('#homesearch-after').hide(300);
$.doTimeout( 300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
Run Code Online (Sandbox Code Playgroud)
如果仍然无效,请尝试使用好的' .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')
});
Run Code Online (Sandbox Code Playgroud)
hover是不是一个真正的event,但结合处理两个事件的速记方法,mouseenter并且mouseleave,这样不工作.one(如图所示这里).要复制hover你的行为你必须有两个绑定,它们都只触发一次,如下所示:
$("#foo").one("mouseenter mouseleave", function(e){
$(this).toggleClass("bar");
});
Run Code Online (Sandbox Code Playgroud)
以上内容与以下内容相同,但只触发一次:
$("#foo").hover(function(){
$(this).toggleClass("bar");
});
Run Code Online (Sandbox Code Playgroud)
如果你想在做不同的事mouseenter和mouseleave,你需要绑定不同的处理程序:
$("#foo").one("mouseenter", function(e){
$(this).addClass("bar").text("Over");
}).one("mouseleave", function(e){
$(this).removeClass("bar").text("Out");
});
Run Code Online (Sandbox Code Playgroud)
我可以从您的代码中读到的是,您只想绑定mouseenter事件,如下所示:
$('#ask').one('mouseenter', function() {
$('#homesearch-after').hide(300);
$.doTimeout( 300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
Run Code Online (Sandbox Code Playgroud)