2009-04-30 10 views
90

jQueryで「ホバー」をアンバインドするにはどうすればよいですか?jQueryで「ホバー」をバインド解除するにはどうすればよいですか?

$(this).unbind('hover'); 
+2

の名前空間を設定することで、あなたは、あなたがホバーイベントに割り当てられた機能をアンバインドしようとしていますかのホバーを変更しようとしていますか? –

+0

Justin Niessnerさんの質問を明確にするために、Javascript/DOMイベントやCSS宣言を削除しようとしていますか?後者はより複雑な問題です。 – eyelidlessness

答えて

188

$(this).unbind('mouseenter').unbind('mouseleave')

以上簡潔に(感謝@Chadグラント) :

$(this).unbind('mouseenter mouseleave')

+36

または$(this).unbind( 'mouseenter mouseleave') –

+0

それはmouseleaveの後でマウスのための必要な配列ですか? – sanghavi7

2

すべてのホバーは舞台裏でやっているマウスオーバーとマウスアウトプロパティにバインドされています

これは動作しません。これらのイベントから個々に関数をバインドしてバインドを解除します。

たとえば、次のHTMLを持っていると言う:

<a href="#" class="myLink">Link</a> 

、あなたのjQueryのは次のようになります。

$(document).ready(function() { 

    function mouseOver() 
    { 
    $(this).css('color', 'red'); 
    } 
    function mouseOut() 
    { 
    $(this).css('color', 'blue'); 
    } 

    // either of these might work 
    $('.myLink').hover(mouseOver, mouseOut); 
    $('.myLink').mouseover(mouseOver).mouseout(mouseOut); 
    // otherwise use this 
    $('.myLink').bind('mouseover', mouseOver).bind('mouseout', mouseOut); 


    // then to unbind 
    $('.myLink').click(function(e) { 
    e.preventDefault(); 
    $('.myLink').unbind('mouseover', mouseOver).unbind('mouseout', mouseOut); 
    }); 

}); 
+0

修正、jquery srcのホバーを見た後、実際にはmouseenter/mouseleaveにバインドされています。同じことをする必要があります。 – bendewey

10

mouseentermouseleaveイベントを個別にアンバインドするか、要素のすべてのイベントをアンバインドします。

$(this).unbind('mouseenter').unbind('mouseleave'); 

または

$(this).unbind(); // assuming you have no other handlers you want to keep 
58

実は、jQuery documentationは(彼らはうまく動作するでしょうが)の上に示すチェーンの例よりも簡単な方法があります:jQueryののよう

$("#myElement").unbind('mouseenter mouseleave'); 

1.7では、イベントバインディングに$.on()$.off()を使用することもできるため、ホバーイベントをバインド解除するには、シンプルでティルダを使用します。

$('#myElement').off('hover'); 

擬似イベント名「ホバー」is used as a shorthand「のMouseEnter mouseleave」のためではなく、それ以前のjQueryのバージョンでは異なる方法で処理されました。リテラルイベント名のそれぞれを明示的に削除する必要があります。 $.off()を使用すると、同じ短縮形を使用して両方のマウスイベントをドロップできるようになりました。

編集2016:まだ

人気の質問、それはjQueryの1.9+でその下のコメントで@Dennis98のポイントに注目する価値があるので、 『ホバー』イベントは、「標準の賛成でdeprecatedましたmouseenter mouseleave "が呼び出されます。だからあなたのイベントのバインディング宣言は次のようになります。

$('#myElement').off('mouseenter mouseleave');

+4

私はjQuery 1.10.2を持っていて、 '$ off("ホバー ")'は動作しません。しかし、両方のイベントを使用して素晴らしい作品。 –

+0

複数のフィルタリング引数が指定された場合、提供されるすべての引数は、削除されるイベントハンドラと一致する必要があります。また、jQuery APIドキュメントでは、.off()メソッドを使用すると、.on()でアタッチされたイベントハンドラが削除されることにも注意してください。それが.on()を使って追加されたイベントにのみ適用されるかどうかはわかりません。しかし、それはすべきではない。 –

+0

@AlexisWilkeええと、v1.9で削除されました。最後のリンクを参照してください。;) – Dennis98

4

アンバインド()ハードコードされたインラインのイベントでは動作しません。

あなたは <div id="some_div" onmouseover="do_something();">からmouseoverイベントのバインドを解除したいのであれば、例えば、私は$('#some_div').attr('onmouseover','')はそれを達成するために迅速かつ汚い方法であることがわかりました。

0

私はこれが2番目の引数(関数)として動作することを発見しました。hover()

$('#yourId').hover(
    function(){ 
     // Your code goes here 
    }, 
    function(){ 
     $(this).unbind() 
    } 
}); 

最初の関数(.hover()の引数)はマウスオーバーであり、コードが実行されます。 2番目の引数は#yourIdからホバーイベントをバインド解除するmouseoutです。 コードは一度だけ実行されます。

+1

'$ .unbind()'だけでは、このオブジェクトからすべてのイベントを削除しないのですか?この場合、 '$ .click()'イベントのようなものは今失敗するでしょう。 –

3

.live()で接続されたイベントの別の解決策は、.die()です。

例:

// attach click event for <a> tags 
$('a').live('click', function(){}); 

// deattach click event from <a> tags 
$('a').die('click'); 

あなたはここで良いrefferenceを見つけることができます:Exploring jQuery .live() and .die()

(私の英語のため申し訳ありません: ">)

1

をあなたは、特定のイベントハンドラを削除することができますoff

$("#ID").on ("eventName", additionalCss, handlerFunction); 

// to remove the specific handler 
$("#ID").off ("eventName", additionalCss, handlerFunction); 
を用いて onによって添付されたこれを使用する

、あなただけhandlerFunction
もう一つの良い練習を削除します、複数の添付イベント

$("#ID").on ("eventName1.nameSpace", additionalCss, handlerFunction1); 
$("#ID").on ("eventName2.nameSpace", additionalCss, handlerFunction2); 
// ... 
$("#ID").on ("eventNameN.nameSpace", additionalCss, handlerFunctionN); 

// and to remove handlerFunction from 1 to N, just use this 
$("#ID").off(".nameSpace"); 
関連する問題