Foros del Web » Programando para Internet » Jquery »

Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Estas en el tema de Ocultar un bloque cuando se despliega otro con un acordeón de JQuery en el foro de Jquery en Foros del Web. Buenas! Ante todo decir que no tengo prácticamente idea de JavaScript por lo que me es tremendamente complicado entender su código. Sin embargo, lo necesito ...
  #1 (permalink)  
Antiguo 06/04/2011, 01:59
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Buenas!

Ante todo decir que no tengo prácticamente idea de JavaScript por lo que me es tremendamente complicado entender su código.

Sin embargo, lo necesito para un menú desplegable que tengo que hacer para una página web. Para ello, estoy utilizando este que ya viene listo para utilizar y es muy sencillo: http://rosanko.blogspot.com/2011/04/...dion-menu.html

El motivo del uso de este en concreto es que parece muy sencillo de implementar y efectivamente, lo es. El funcionamiento es el siguiente:

Al hacer clic sobre el elemento padre, se despliega (si está oculto) y se oculta (si está desplegado) el elemento hijo. Sin embargo, si despliegas el primer elemento padre, y posteriormente quieres desplegar un segundo elemento padre, se mantienen los dos abiertos, no se cierra el primero, por lo que aquí viene mi solicitud de ayuda:

  1. ¿Cómo puedo hacer para que al hacer clic sobre otro elemento padre, se cierre el que ya está abierto?
  2. ¿Cómo puedo hacer para que un elemento padre en concreto aparezca desplegado por defecto (si se puede hacer, que tampoco lo sé)?
El código de la función es simplemente el siguiente:
Código Javascript:
Ver original
  1. $(document).ready(function()
  2. {
  3.     $("#menulateral span.despliega").click(function()
  4.     {
  5.         $(this).next("ul.acordeon").slideToggle(300).siblings("ul.acordeon").slideUp("slow");
  6.     });
  7. });

Mi menú es bastante simple, es un menú vertical donde hay varios elementos y sólo dos tienen opciones internas.

¡Estoy desesperada ya! Echadme una mano por favor...!
Gracias por vuestra ayuda :)
  #2 (permalink)  
Antiguo 06/04/2011, 02:20
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 06/04/2011, 03:01
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Que tal malucha,

Deberia comportarse de esa forma, abrir el que haces click y cerrar el resto, pero para que esto funcione debe haber una estructura html determinada, por lo que veo, para que funcione correctamente deberias tener algo asi:

Código HTML:
Ver original
  1. <div id="menulateral">
  2.     <span class="despliega">Trigger</span>
  3.     <ul class="acordeon">
  4.         <li>...</li>
  5.         <li>...</li>
  6.         <li>...</li>
  7.     </ul>
  8.     <span class="despliega">Trigger</span>
  9.      <ul class="acordeon">
  10.         <li>...</li>
  11.         <li>...</li>
  12.         <li>...</li>
  13.     </ul>
  14.     <span class="despliega">Trigger</span>
  15.      <ul class="acordeon">
  16.         <li>...</li>
  17.         <li>...</li>
  18.         <li>...</li>
  19.     </ul>
  20. </div>

ajusta el html o bien postealo para ver que puede estar fallando y para que aparezca el primero abierto, o bien lo haces por css o puedes disparar el click, algo asi:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.     var triggers = $("#menulateral span.despliega");
  3.     triggers.click(function() {
  4.         $(this).next("ul.acordeon").slideToggle(300).siblings("ul.acordeon").slideUp("slow");
  5.     });
  6.     triggers.first().click();
  7. });

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 06/04/2011 a las 03:08
  #4 (permalink)  
Antiguo 06/04/2011, 03:07
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Pues sí, perdón. Pego el código html del menú a ver si nos da alguna idea:

Código HTML:
<div id="menulateral">
        <ul>
            <li><a href="#" title="Quienes Somos">Quienes somos</a></li>
            <li><a href="#" title="Nuestros Profesionales">Nuestros profesionales</a></li>
            <li><span class="despliega">Qué es el tarot</span>
                <ul class="acordeon">
                    <li><a href="#" title="Historia y Significado del Tarot">Historia y Significado</a></li>
                    <li><a href="#" title="Interpretación de las cartas">Interpretación de las cartas</a></li>
                    <li><a href="#" title="Tipos de cartas">Tipos de cartas</a></li>
                    <li><a href="#" title="Tarot y Astrología">Tarot y Astrología</a></li>
                    <li><a href="#" title="Tarot y Kabbalah">Tarot y Kabbalah</a></li>
                    <li><a href="#" title="Consulta personalizada" class="especial">Consulta personalizada</a></li>
                    <li><a href="#" title="Tarot del día gratuíto">Tarot del día gratuíto</a></li>
                </ul></li>
            <li><span class="despliega">Qué es la astrología</span>
                <ul class="acordeon">
                    <li><a href="#" title="Historia de la Astrología">Historia de la Astrología</a></li>
                    <li><a href="#" title="Características de los signos">Características de los signos</a></li>
                    <li><a href="#" title="Interpretación de las Cartas Astrales">Interpretación de las cartas</a></li>
                    <li><a href="#" title="Significado del sol, la luna y el ascendente en las cartas astrales">Significados</a></li>
                    <li><a href="#" title="Fases de la luna">Fases de la luna</a></li>
                    <li><a href="#" title="Significado de la luna cuando entra en cada signo">La luna en los signos</a></li>
                    <li><a href="#" title="Los tránsitos planetarios y las 12 casas - Pronósticos para el 2011">Tránsitos planetarios. 12 casas</a></li>
                    <li><a href="#" title="Consultas personalizadas de las cartas astrales" class="especial">Consultas personalizadas</a></li>
                    <li><a href="#" title="Autores y Contribuciones de destacados astrólogos">Autores y contribuciones</a></li>
                </ul></li>
            <li><a href="#" title="Numerología - Significado">Numerología</a></li>
            <li><a href="#" title="Novedades de interés">Novedades</a></li>
            <li><a href="#" title="Links relacionados">Links relacionados</a></li>
            <li><a href="#" title="Formulario de contacto">Formulario de contacto</a></li>
        </ul>
    </div> 
Gracias! :)
  #5 (permalink)  
Antiguo 06/04/2011, 03:31
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

A ver,

Primero deberias por css cerrar todos los acordeon's, agrega a tu cascada

Código CSS:
Ver original
  1. .acordeon{display:none}

y luego el javascript podria ser asi:

Código Javascript:
Ver original
  1. $(document).ready(function(){                
  2.     var togglers = $('#menulateral ul.acordeon');
  3.     var triggers = $('#menulateral span.despliega');
  4.     triggers.click(function() {
  5.         togglers.slideUp('slow');
  6.         $(this).next('ul.acordeon').slideToggle(300);
  7.     });                
  8.     triggers.first().click();                
  9. });

prueba y nos comentas.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 06/04/2011, 05:30
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Buenooo casi casi está como quiero :)

masterpuppet tu código me funciona bien. El caso es que antes de cerrar el anterior me abre el nuevo, es prácticamente un segundo pero al tener los dos abiertos aunque sea durante ese segundo se sale de la caja.

¿No se puede invertir el orden? ¿Primero cerrar el abierto y luego abrir el nuevo?

Mil gracias por la ayuda! :)
  #7 (permalink)  
Antiguo 07/04/2011, 02:21
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Bueno, revisando algún que otro post (y aún sin entender prácticamente nada de JavaScript y menos todavía de JQuery) encontré la solución para cerrar a la vez que se abre el otro elemento, de forma que no se salga del cuadro.

Lo dejo aquí por si alguien lo necesita:

Código Javascript:
Ver original
  1. $(document).ready(function(){                
  2.     var togglers = $('#menulateral ul.acordeon');
  3.     var triggers = $('#menulateral span.despliega');
  4.     triggers.click(function() {
  5.         togglers.slideUp('slow');
  6.         $(this).next('ul.acordeon').slideDown('slow');
  7.     });                
  8.     triggers.first().click();                
  9. });

De todas formas, si hago clic sobre el mismo elemento, este se vuelve a desplegar (aunque ya esté desplegado) y claro, lo ideal sería que un clic desplegara, otro clic encogiera.

¿Alguien tiene alguna idea? ¡Ayudaaaaa!

Gracias! :)
  #8 (permalink)  
Antiguo 08/01/2012, 06:38
 
Fecha de Ingreso: abril-2009
Mensajes: 3
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Ocultar un bloque cuando se despliega otro con un acordeón de JQuery

Hola a todos.

Imagino que por fecha estara resuelto pero por si acaso. Aqui [URL="http://www.jourmoly.com.ar/mootools-accordion/"]http://www.jourmoly.com.ar/mootools-accordion/[/URL] explican bastante bien el funcionamiento de acordeon. A ver si esto te vale.

Yo el problema que tengo, por si alguien me lo puede decir, es que al pinchar en un enlace y pasar a otra pagina el acordeon se me cierra y me gustaria que se quedase abierto por el mismo sitio. ¿Sabeis como se hace?

Un saludo a todos.

Etiquetas: acordeon, javascript
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:29.