2012-03-21 22 views
30

私は一連の要素を持っています(それらを '.my要素'と呼ぶことができます)。jquery関数を組み合わせる - on()hover/mouseenter/mouseleave

マウスがこれらの要素の上にあるかどうかによって変数を設定したいと考えています。以下のコードはうまくいきますが、もっと良い方法があると思われます...私はこれをしてDOMを一度参照すればよいのですか?

$(document).on('mouseenter','.my-elements', function(){ 
    mouse_is_inside = true; 
}); 

$(document).on('mouseleave','.my-elements', function(){ 
    mouse_is_inside = false; 
}); 

ありがとうございます!

答えて

82

をincidatingグローバル変数を持っているためにその一般的ではない良いアイデアあなたが一緒の両方に結合し、event.typeを確認することができます:

$(document).on('mouseenter mouseleave', '.my-elements', function (ev) { 
    mouse_is_inside = ev.type === 'mouseenter'; 
}); 

それとも、あなたがそれらを分離しておくにしたい場合は、.onはイベントマップを受け取り、別の構文は次のとおりです。

$(document).on({ 
    mouseenter: function() { 
     mouse_is_inside = true; 
    }, 

    mouseleave: function() { 
     mouse_is_inside = false; 
    } 
}, '.my-elements'); 
+4

+1イベントタイプのアイデア。 – worenga

+0

ありがとうジョナサン - 私のためのソリューション1が最適です! –

+0

まさに私が探していたもの、ありがとうジョナサン。 – jffgrdnr

5

チェックアウトと同じですjQuery hover

$(selector).mouseenter(handlerIn).mouseleave(handlerOut); 

UPDATE:私はちょうどあなたが()メソッドを介してイベントを永続化する必要があります実現。その場合、あなたはそのようなイベントマップを使用することができます。

.on({ 
    mouseenter: function() { 
     console.log('enter'); 
    }, 
    mouseleave: function() { 
     console.log('bye!'); 
    } 
}) 
2

をまた試みることができる:

$(".my-elements").hover(function(eIn) { 
    // do work for mouse over 
}, 
function(eOut) { 
    // do work for mouse out 
}); 

更新と訂正

は、あなたがよりダイナミックなロックを必要と実現しましたこの場合、Jonathan LonowskiさんまたはDerek Hunzikerさんは完璧です

+0

動的に作成される要素では機能しません。 ** OP OP:** _ "ドキュメントの準備が整っていて、後で他の人が読み込まれる間に..." _ – Sparky

3

ほぼすべてのjQueryメソッドret骨壷オブジェクト、あなたがそれらを一緒に連鎖することができますので:

$(document).on('mouseenter','.my-elements', function(){ 
    mouse_is_inside = true; 
}).on('mouseleave','.my-elements', function(){ 
    mouse_is_inside = false; 
}); 
+0

デモ - > http://jsfiddle.net/skram/qsmfb/ –

+0

警告の言葉、これは連鎖可能ではないため、ライブでは機能しません。 – jbabey

0
$('.my-elements').on('mouseenter mouseleave', function(event){ 
    mouse_is_inside = event.type === 'mouseenter'; 
}); 

が、イベント状態

+0

グローバル変数をイベント状態インジケータとして設定する際の問題は何ですか? –

1

最初に、ドキュメントではなく要素を選択できます。これは、値が正しい値に設定mouse_is_inside変数を維持する必要がありますマウスがアウトか行くたびに、否定ます

$('.my-elements').on('mouseenter mouseleave', function(){ 
    mouse_is_inside = !mouse_is_inside; 
}); 

あなたはこのようなショートカット表記を試みることができる

$('.my-elements').on('mouseenter', function(){ 
    mouse_is_inside = true; 
}); 

... 。