Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
jQuery cerrar menú desplegable en mouseleave de dos elementos

Estoy tratando de agregar una ventana emergente a una ul existente (#top-menu-nav) en una herramienta con jquery. Lo único con lo que estoy luchando es cómo agregar la condición para cerrar solo el menú desplegable cuando el usuario no está pasando el elemento li ($elementLi) o la ventana emergente (.popup-links) y mantenerlo abierto mientras el usuario se cierne sobre uno de estos dos elementos. En otras palabras; ¿Cómo puedo agregar la condición de que la ventana emergente se cierre cuando el cursor abandone el elemento li o el área emergente, lo que sea primero? Actualmente, la ventana emergente solo se cierra cuando el cursor se mueve sobre el área emergente y la abandona. Gracias por tu ayuda.

JSFiddle

HTML proporcionado por la herramienta - no editable

 <ul id="top-menu-nav"> <li>Ex1</li> <li class=" "> <a href="/index.php?r=custom_pages%2Fview&amp;id=26" target="" data-sort-order="800"><i class="fa fa-link"></i> Links</a> </li> <li>Ex2</li> </ul>

HTML

 <div class="popup-links"> <ul class="popup-links-content"> <p style="font-weight: 700; padding-top: 20px;">Social Media</p> <li><a href="">LinkedIn</a></li> <li><a href="">Instagram</a></li> <li><a href="">Vimeo</a></li> </ul> </div>

jquery

 $(function() { $elementA = $('#top-menu-nav').find('a:contains("Links")'); $elementLi = $elementA.closest('li'); $elementLiPos = $elementLi.position(); $($elementLi).mouseover(function() { var pos = $(this).position(); var width = $(this).outerWidth(); $('.popup-links').css({ position: "fixed", top: pos.top + "px", left: (pos.left + width) + "px" }).show(); }); $('.popup-links').on('mouseleave', function(){ $(this).hide(); }); });
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

debe agregar el evento mousemove en el cuerpo para verificar si el mouse se encuentra sobre el elemento del menú o el menú desplegable para mostrar ocultar

 $('body').on('mousemove',(e)=>{ if(!e.target.closest('li') && !e.target.closest('.popup-links') ) $('.popup-links').hide() })

violín

about 4 years ago · Santiago Trujillo Denunciar

0

La forma más fácil sin cambiar mucho el código es ocultar primero la ventana emergente cuando se carga la página, lo que significa agregar

 $('.popup-links').hide();

me gusta

 $(function() { //here $('.popup-links').hide(); $elementA = $('#top-menu-nav').find('a:contains("Links")'); $elementLi = $elementA.closest('li'); $elementLiPos = $elementLi.position(); $($elementLi).mouseover(function() { var pos = $(this).position(); var width = $(this).outerWidth(); $('.popup-links').css({ position: "fixed", top: pos.top + "px", left: (pos.left + width) + "px" }).show(); }); $('.popup-links').on('mouseleave', function(){ $(this).hide(); }); });
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda