2011-07-07 15 views
7

このアイテムには多くの投稿がありましたが、適切な解決策が見つかりませんでした。申し訳ありませんが既にどこかで答えられている場合。jQuery hide mouseout on

私が欲しいもの

私はclickイベントがhref元素から発射されたときに開く私のメニュー項目、とDIVを持っています。 マウスがDIV要素から外れていて、href要素を超えていないときに、メニューを非表示にしたいと思います。これまでのところ、私はhref要素をクリックすると閉じることができます。

だから、私のjQueryのは、次のようになります。

$("#menu_opener").click(function() { 
      if ($("#menudiv").is(":hidden")) { 
       $("#menudiv").slideDown("slow"); 
      } else { 
       $("#menudiv").hide(); 
      } 
     });  

そして、私のHTMLは次のようになります。事前に

<div> 
<a href="#" id="menu_opener">Menu</a> 
</div> 
<div id="menudiv" style="position: fixed; background-color: white; display: none;"> 
    <a href="#" id="A1">Page 1</a><br /> 
     <a href="#" id="A2">Page 2</a><br /> 
    <a href="#" id="A3">Page 3</a><br />       
</div> 

ありがとう!

答えて

4

編集:初めてご質問を誤解しました。私はこれを数回実行しなければなりませんでした。そして、メニューを常にhref要素と重なるように移動しました。 href OR href要素がホバリングされている場合は、メニューを表示/非表示にします。

$("#menu_opener, #menudiv").hover(
    function(){ 
     $("#menudiv").show(); 
    }, 
    function(){ 
     $("#menudiv").hide(); 
    } 
); 

そして、それは上に移動し、HREFを重ねているようmenudivのスタイルのためのトッププロパティを設定します。

<div> 
    <a href="#" id="menu_opener">Menu</a> 
</div> 
<div id="menudiv" style="position: fixed; top: -1px; background-color: white; display: none;"> 
    <a href="#" id="A1">Page 1</a><br /> 
    <a href="#" id="A2">Page 2</a><br /> 
    <a href="#" id="A3">Page 3</a><br />       
</div> 
+0

wooops、misread question。編集された答え。 –

+0

このソリューションはうまく動作します、ありがとう。 – Jorelie

6

私は作品「のhref要素の上ではありません」理解していれば、あなたはのdiv#のmenudivのオフにマウスを置いたときにメニューが表示さ滞在したいが、それでも#のmenu_openerをマウスオーバー?

これが当てはまる場合、私はunqiue divにすべてのものをラップし、それをターゲットにします。 マウスオーバーをマウスオーバーで使用してください。

http://api.jquery.com/mouseleave/

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

<div id="menu_container"> 
    <div> 
    <a href="#" id="menu_opener">Menu</a> 
    </div> 
    <div id="menudiv" style="position: fixed; background-color: white; display: none;"> 
    <a href="#" id="A1">Page 1</a><br /> 
    <a href="#" id="A2">Page 2</a><br /> 
    <a href="#" id="A3">Page 3</a><br />       
    </div> 
</div> 

と、スクリプトは次のようなものになるだろう:あなたがあるとしてHTMLを維持し、単純に以下を追加することができます

$("#menu_opener").click(function() { 
    if ($("#menudiv").is(":hidden")) { 
     $("#menudiv").slideDown("slow"); 
    } else { 
     $("#menudiv").hide(); 
    } 
}); 
$("#menu_container").mouseleave(function(){ 
    $('#menudiv').hide(); 
}); 
+0

ポジショニングのための余分なCSSがあれば、このソリューションは完璧に機能します! – Jorelie

16

$("#menudiv").mouseleave(function(){ 
    $(this).hide(); 
}); 

jsFiddle:http://jsfiddle.net/5SSDz/

+0

良い答えですが、少しバグがあります。 Testという言葉の上にマウスを乗せてマウスを右に動かすと、Testの上に戻り、次に上に移動します。何らかの奇妙な動作があります。私はそれを修正する方法を知らない、ちょうどあなたの少しバギーを知らせる。 –

+1

@JaydenLawson JavaScriptを使わずにCSSを使ってこれを行うことをお勧めします。マウスイベントに関する私の経験は、100%信頼できないということでした。いくつかのCSS3トランジションエフェクトを使用できます。私はあなたがGoogleで何かを見つけることができると確信しています、私はCSSの男ではないので、CSSコードを助けることはできません。 – harsimranb