jQuery - 在悬停时使用.one()

Jar*_*red 7 jquery

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

$('#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()是简写形式,结合mouseentermouseleave,而不是事件本身.

试试这个:

$('#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)

  • 我想它必须是一个JavaScript事件,我不认为"悬停"是.所以尝试像"mousemove"或"mouseover"这样的东西. (2认同)

mek*_*all 8

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)

如果你想在做不同的事mouseentermouseleave,你需要绑定不同的处理程序:

$("#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)