2011-01-09 11 views
6

ホバー機能を1回だけ実行する方法はありますか?これは私が現在試みているものです:jQuery - ホーンでの.one()の使用

$('#ask').live('hover', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

しかし、それは動作していません。このホバーを一度有効にするにはどうしたらよいですか?

私は、.liveを.oneと.bind ...で変更しようとしましたが、無駄になりました。

+2

が、あなたのように、直接その中にコードを追加することで、タイムアウトを取り除くことができます:私はあなたのコードから読み取ることができます帽子は、あなただけのように、mouseenterイベントをバインドするために探しているということです –

答えて

10

あなたは既にあなた自身に答えました。.one().live()ではなく)を使用してください。

しかし、.hover()は、mouseentermouseleaveへのバインディングの省略形であり、それ自体のイベントではありません。

これを試してみてください:

$('#ask').one('mouseenter', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

をそれはまだ動作しない場合は、ちょうどそれが終わっています後すぐにそれをINGの「.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

このコードを使用すると何らかの理由で、このコードが使用されます。何もしません。 =/ – Jared

+0

@ Jared:あなたの '#ask 'はJSによってあなたのページに動的に追加されていますか? – BoltClock

+0

いいえ、静的HTMLで表示されます。 – Jared

8

hoverevent実が、2つのイベント、mouseentermouseleaveのハンドラを結合する速記法ではなく、(hereに示すように)のような.oneでは動作しません。それは一度だけ発動することを除いて、

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

が上記以下と同じになります:hoverの動作を再現するには、両方のは、このように、一度だけトリガする2つのバインドを持っている必要があるだろう:

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

W

あなたの質問に関係のない
$('#ask').one('mouseenter', function() { 
    $('#homesearch-after').hide(300); 
    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 
}); 
+1

また、 '.one( 'mouseenter mouseleave'、function(e){...)' – BoltClock

+0

@BoltClock、これは私の例のように、 'toggle'の並べ替えをしたいと思っている方が良いでしょう。私はそれを追加します! – mekwall

関連する問題