2011-07-07 18 views
7

Vi un montón de publicaciones sobre este artículo, pero no pude encontrar la solución correcta. Lo siento si ya ha sido respondido en alguna parte.jQuery ocultar div en mouseout

lo que quiero: Tengo un DIV con mis elementos de menú, que se abre cuando el evento se dispara click de un elemento href. Ahora quiero ocultar el menú, cuando el mouse está fuera del elemento DIV y no está por encima del elemento href. Hasta ahora solo puedo cerrarlo cuando hago clic en el elemento href.

lo tanto, mi jQuery se ve así:

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

Y mi HTML se parece a esto:

<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> 

Gracias de antemano!

Respuesta

4

Editar: Perdón, leí la pregunta la primera vez. Tuve que hacer esto un par de veces, y siempre moví el menú un píxel hacia arriba para que se superpusiera al elemento href. Y luego mostrar/ocultar el menú si los elementos href O href están siendo suspendidos.

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

y establezca la propiedad arriba para el estilo de la menudiv lo que se mueve hacia arriba y se superpone el href.

<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

woops, misread question. respuesta editada. –

+0

Esta solución funciona bien, gracias. – Jorelie

6

si entiendo el "no está por encima del elemento href" pieza, desea que el menú para permanecer visibles al pasar el ratón fuera del div # menudiv, pero aún ratón por encima de un # menu_opener ??

si ese es el caso, envolvería todo el contenido en un div único y lo atacaría. y use mouseleave sobre mouseout.

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

así, el código HTML se convierte en:

<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> 

y su secuencia de comandos sería algo así como:

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

¡Con algunos CSS adicionales para el posicionamiento, esta solución funciona perfectamente! – Jorelie

16

Puede mantener el código HTML tal como está y sólo tiene que añadir lo siguiente:

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

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

+0

Buena respuesta, pero tiene un poco de errores. Cuando mueva la palabra Test y luego mueva el mouse hacia la derecha, luego vuelva sobre Test, luego hacia abajo; hay comportamientos extraños. No sé cómo solucionarlo, solo hacerle saber que es un poco problemático. –

+1

@JaydenLawson Yo recomendaría que hagas esto usando CSS, en lugar de javascript. Mi experiencia con los eventos de mouse ha sido que no son 100% confiables. Puede usar algunos efectos de transición CSS3. Estoy seguro de que puedes encontrar algo en Google, no soy CSS, así que no puedo ayudarte con el código CSS. – harsimranb

Cuestiones relacionadas