Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] slideToggle que se recoja cuando se expanda otro

Estas en el tema de slideToggle que se recoja cuando se expanda otro en el foro de Jquery en Foros del Web. Buenas Amigos, Tengo un código en el tengo varias cajas de texto que están ocultas y las muestro con slideTogle haciendo click en sus correspondientes ...
  #1 (permalink)  
Antiguo 07/01/2016, 12:35
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
slideToggle que se recoja cuando se expanda otro

Buenas Amigos,

Tengo un código en el tengo varias cajas de texto que están ocultas y las muestro con slideTogle haciendo click en sus correspondientes a href. Funciona correctamente sólo que me gustaría que al expandir cualquiera de las cajas las otras, si están expandidas, se recojan.

El código es el siguiente:

$("#abre").click(function(event) {
event.preventDefault();
$("#caja1").slideToggle();
});

$("#caja1 a").click(function(event) {
event.preventDefault();
$("#caja1").slideUp();
});

//**********La segunda caja y sucesivas hasta 5 seguirían así ************/

$("#abre2").click(function(event) {
event.preventDefault();
$("#caja2").slideToggle();
});
$("#caja2 a").click(function(event) {
event.preventDefault();
$("#caja2").slideUp();
});

....
Muchas gracias por su ayuda
  #2 (permalink)  
Antiguo 08/01/2016, 07:11
 
Fecha de Ingreso: diciembre-2015
Ubicación: rosario
Mensajes: 69
Antigüedad: 8 años, 11 meses
Puntos: 5
Respuesta: slideToggle que se recoja cuando se expanda otro

podrias poner el html, xq creo q se puede mejorar en un solo click y que funcione para todas las cajas
  #3 (permalink)  
Antiguo 08/01/2016, 10:09
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 11 años, 2 meses
Puntos: 39
Respuesta: slideToggle que se recoja cuando se expanda otro

Todas las cajas tienen que tener una misma clase y cuando le hagas el click al enlace para abrir, las buscas todas por esa clase y les haces un slideUp...
__________________
velarde23.com - Soluciones Web
  #4 (permalink)  
Antiguo 09/01/2016, 08:59
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: slideToggle que se recoja cuando se expanda otro

Sí, mira, es muy simple por un lado tenemos los enlaces:

Código:
<a href="#" id="abre"> Hiperprolactinemia</a>
<a href="#" id="abre2">Efectos Metabólicos</a>
...
Y por otro las llamadas a los distintos div que muestran sus textos correspondientes:

Código:
<div id="caja1"> 
    <p>texto1....</p>.
  </div>

<div id="caja2"> 
      <p>texto2.....</p>
</div>
...
Para que te hagas una idea la maquetación está dispuesta de forma que tengo un contenedor con los diferentes enlaces y otro contenedor común en donde aparecen los distintos div ocultos con sus correspondientes textos.

Gracias de verdad, por la ayuda
  #5 (permalink)  
Antiguo 09/01/2016, 09:14
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: slideToggle que se recoja cuando se expanda otro

Por lo que te entiendo, no sería viable esa solución porque cada caja (div) tiene un contenido distinto a mostrar, que son llamadas desde sus correspondientes enlaces. Cada enlace referencia a un div en concreto y se muestra en un contenedor común donde van apareciendo unos u otros según el enlace que pulsemos.

Ahora mismo tal y como lo tengo aparece un div debajo del otro y si quiero ocultarlo hay que hacer click de nuevo en el enlace. Mi pretensión es que cuando uno aparezca los demás se oculten automáticamente si estuvieran ya desplegados. Una cosa así como el típico acordeón de jquery.

Gracias por tu interés
  #6 (permalink)  
Antiguo 09/01/2016, 14:40
Avatar de g3kdigital  
Fecha de Ingreso: noviembre-2013
Ubicación: En mi apartamento en bogotá
Mensajes: 208
Antigüedad: 11 años
Puntos: 39
Respuesta: slideToggle que se recoja cuando se expanda otro

Y así no te sirve? Solo haz clic en cada enlace:

http://codepen.io/g3kdigital/pen/eJWbNZ?editors=110
__________________
Puedes ser el tipo de persona que se amarga por lo inevitable o aceptar el reto de superarse siempre e ir a la par con el progreso.

WEB: G3K.co | codepen.io/g3kdigital
  #7 (permalink)  
Antiguo 09/01/2016, 14:57
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 11 años, 2 meses
Puntos: 39
Respuesta: slideToggle que se recoja cuando se expanda otro

Cita:
Iniciado por Vir4 Ver Mensaje
Por lo que te entiendo, no sería viable esa solución porque cada caja (div) tiene un contenido distinto a mostrar, que son llamadas desde sus correspondientes enlaces. Cada enlace referencia a un div en concreto y se muestra en un contenedor común donde van apareciendo unos u otros según el enlace que pulsemos.

Ahora mismo tal y como lo tengo aparece un div debajo del otro y si quiero ocultarlo hay que hacer click de nuevo en el enlace. Mi pretensión es que cuando uno aparezca los demás se oculten automáticamente si estuvieran ya desplegados. Una cosa así como el típico acordeón de jquery.

Gracias por tu interés
Eso es lo mismo que entendí al principio, mira, cuando hagas click en un enlace primero cierra todas las cajas con la clase '.caja' que estén abiertas (siempre va ser solo una) y luego abres la caja que quieras abrir..
__________________
velarde23.com - Soluciones Web
  #8 (permalink)  
Antiguo 10/01/2016, 13:11
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: slideToggle que se recoja cuando se expanda otro

Cita:
Iniciado por siddartha23 Ver Mensaje
Eso es lo mismo que entendí al principio, mira, cuando hagas click en un enlace primero cierra todas las cajas con la clase '.caja' que estén abiertas (siempre va ser solo una) y luego abres la caja que quieras abrir..
Muchas gracias,

Ahora entiendo lo que me indicas. Lo intento aplicando una clase "cierra" a las cajas como puedes ver en este pen:

[URL="http://codepen.io/virfour/pen/eJWqwG"]http://codepen.io/virfour/pen/eJWqwG[/URL]

Pero no sé donde cometo el error pero el caso que no me funciona
  #9 (permalink)  
Antiguo 10/01/2016, 13:20
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: slideToggle que se recoja cuando se expanda otro

No me serviría porque las cajas a expandir y recoger tienen que estar fuera del acordeon.

Por eso decía antes que la solución del acordeon en este caso no me sirve, además tiene que funcionar en IE7 e IE8 (pero bueno eso es historia aparte).

gracias!!
  #10 (permalink)  
Antiguo 10/01/2016, 20:54
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 11 años, 2 meses
Puntos: 39
Respuesta: slideToggle que se recoja cuando se expanda otro

Cita:
Iniciado por Vir4 Ver Mensaje
Muchas gracias,

Ahora entiendo lo que me indicas. Lo intento aplicando una clase "cierra" a las cajas como puedes ver en este pen:

[URL="http://codepen.io/virfour/pen/eJWqwG"]http://codepen.io/virfour/pen/eJWqwG[/URL]

Pero no sé donde cometo el error pero el caso que no me funciona
La función que usaste para cerrar las cajas la estabas poniendo fuera del evento click del enlace por eso no funcionaba, he cambiado slideUp por hide para que el cambio de uno a otro se vea mejor, aún se puede mejorar más el resultado...

http://codepen.io/mvelarde/pen/OMgVMy

Muy aparte que sería mejor que crearas una función específica para esa acción para que no tengas mucho código repetido en tu js...
__________________
velarde23.com - Soluciones Web
  #11 (permalink)  
Antiguo 10/01/2016, 21:32
Avatar de g3kdigital  
Fecha de Ingreso: noviembre-2013
Ubicación: En mi apartamento en bogotá
Mensajes: 208
Antigüedad: 11 años
Puntos: 39
Respuesta: slideToggle que se recoja cuando se expanda otro

Es decir, algo más como en este pen: http://codepen.io/g3kdigital/pen/gPRbBJ iba a sugerirte usar el seudoselector :target con css, pero cuando de retrocompatibilidad se trata lo mejor es javascript.


Utilice esta estructura html donde los div, están separados de los enlaces.:

Código HTML:
Ver original
  1. <div class="enlaces">
  2.   <a href="#" class="enlace focus1">  Caja 1  </a>
  3.   <a href="#" class="enlace focus2">  Caja 2  </a>
  4.   <a href="#" class="enlace focus3">  Caja 3  </a>
  5. </div>
  6.  
  7. <div class="caja box1">
  8.   <h4 class="titulo">contenido 1</h4>
  9.   <p class="parrafo">Parrafo</p>
  10. </div>
  11. <div class="caja box2">
  12.   <h4 class="titulo">contenido 2</h4>
  13.   <p class="parrafo">Parrafo</p>
  14. </div>
  15. <div class="caja box3">
  16.   <h4 class="titulo">contenido 3</h4>
  17.   <p class="parrafo">Parrafo</p>
  18. </div>

Luego tienes que ocultar el contenido con css y crear una clase ("aparece") que desoculte este contenido.

Código CSS:
Ver original
  1. .caja {
  2.   overflow: hidden;
  3. }
  4.  
  5. .parrafo {
  6.   height: 1px;
  7.   opacity: 0;
  8. }
  9.  
  10. .parrafo.aparece {
  11.   height: auto;
  12.   opacity: 1;
  13. }


Por ultimo, solo tienes que coger jQuery y creas una función que se active cuando no importa que enlace tenga el foco, todos las cajas oculten los elementos y otra función donde dependiendo del enlace clickeado des-oculte al div deseado:

Código Javascript:
Ver original
  1. $( ".enlace" ).focus(function() {
  2.   $( ".parrafo" ).removeClass("aparece");
  3. });
  4.  
  5. $( ".focus1" ).focus(function() {
  6.   $( ".box1 .parrafo" ).addClass("aparece");
  7. });
  8. $( ".focus2" ).focus(function() {
  9.   $( ".box2 .parrafo" ).addClass("aparece");
  10. });
  11. $( ".focus3" ).focus(function() {
  12.   $( ".box3 .parrafo" ).addClass("aparece");
  13. });

Hay maneras de optimizar más el código de manera que no sea necesario crean una función por cada enlace y div, pero mis conocimientos en jQuery son muy limitados.
__________________
Puedes ser el tipo de persona que se amarga por lo inevitable o aceptar el reto de superarse siempre e ir a la par con el progreso.

WEB: G3K.co | codepen.io/g3kdigital

Última edición por g3kdigital; 10/01/2016 a las 21:40
  #12 (permalink)  
Antiguo 11/01/2016, 13:52
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo Respuesta: slideToggle que se recoja cuando se expanda otro

¡Ahora sí!!!

El caso que hice varias pruebas pero que despiste dejarme fuera la función, pero creo que ya entraba en un bucle obsesivo de pesimismo.

Muchisimas gracias chicos por vuestra paciencia, soy unos cracks los que os pasáis por aquí prestando vuestro tiempo para ayudar el personal.
  #13 (permalink)  
Antiguo 11/01/2016, 13:56
 
Fecha de Ingreso: junio-2009
Mensajes: 7
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: slideToggle que se recoja cuando se expanda otro

Muchas Gracias amigo,

Sí, es otra forma viable que le da solución a mi cuestión. De verdad que encantado con vuestra ayuda

Etiquetas: slidetoggle
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 15:13.