有没有办法让悬停功能只执行一次?这就是我目前正在尝试的事情:
$('#ask').live('hover', function() {
$('#homesearch-after').hide(300);
$.doTimeout( 300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
但那不起作用。我怎么才能让这个悬停一次激活?
我尝试用.one和.bind改变.live ......导致虚无。
答案 0 :(得分:11)
您已经自己回答,请使用.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')
});
答案 1 :(得分:8)
hover
不是真正的event
,而是一种速记方法,用于绑定两个事件mouseenter
和mouseleave
的处理程序,因此不适用于{{ 3}}(如图.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();
});
});