Foros del Web » Programando para Internet » Jquery »

Abrir un div al hacer click

Estas en el tema de Abrir un div al hacer click en el foro de Jquery en Foros del Web. Tengo 3 botones, lo que deseo es que al hacer clic en boton1 se abra descripción 1, pero al hacer clic en boton2, se cierre ...
  #1 (permalink)  
Antiguo 22/06/2014, 10:59
 
Fecha de Ingreso: junio-2014
Mensajes: 26
Antigüedad: 9 años, 10 meses
Puntos: 0
Abrir un div al hacer click

Tengo 3 botones, lo que deseo es que al hacer clic en boton1 se abra descripción 1, pero al hacer clic en boton2, se cierre automaticamente la descripcion1 para abrir la descripcion2 en el mismo lugar.

Las 3 descripciones estan con display none.

Me Funciona cuando abre cada descripcion, pero no cierra cuando abro el otro.
Y Si se puediera trabajar con class y no id, sería mejor.
HTML
Código:
 
<div id='boton1'>
        <a>Titulo...</a>
</div>
<div id='boton2'>
        <a>Titulo...</a>
</div>
<div id='boton3'>
        <a>Titulo...</a>
</div>

<div id='descripcion1'>
</div>
<div id='descripcion2'>
</div>
<div id='descripcion2'>
</div>
------------------------------------------------------------------

Aqui no se si poner if($("#boton1).click"){
$("#descripcion1").slideToggle("slow");
} else if(){
}

algo asi
Código:
<script> 
$(document).ready(function(){
	
  	$("#boton1").click(function(){
    $("#descripcion1").slideToggle("slow");
	
  });
  $("#boton2").click(function(){
    $("#descripcion2").slideToggle("slow");
	
  });
  $("#boton3").click(function(){
    $("#descripcion3").slideToggle("slow");
	
  });
});
</script>
Gracias, slds
  #2 (permalink)  
Antiguo 23/06/2014, 10:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Abrir un div al hacer click

Cada vez que des un clic sobre alguno de los botones, tendrías que recorrer el conjunto de elementos <div> de abajo y verificar si el número asignado al final del id de cada uno de ellos, coincide con el número asignado al final del id del botón. Si son iguales, muestras al <div>, caso contrario, lo ocultas.

Código Javascript:
Ver original
  1. $("[id^=boton]").click(function(){
  2.     var valorBoton = this.id[this.id.length - 1];
  3.     Array.prototype.forEach.call($("[id^=descripcion]"), function(div){
  4.         var valorDiv = div.id[div.id.length - 1];
  5.         if (valorBoton == valorDiv)
  6.             $(div).slideDown("slow");
  7.         else
  8.             $(div).slideUp("slow");
  9.     });
  10. });



Para realizar el recorrido sobre los elementos <div>, utilizo el método Array.prototype.forEach, pero si quieres que esto también funciones en Internet Explorer 8 y versiones inferiores, te conviene utilizar un bucle clásico como for o while.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 24/06/2014, 12:49
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un div al hacer click

Un poco mas simple sería trabajarlo con clases.
Para empezar restructuraría el DOM:

Código:
<div class="boton" id='1'>
        <a>Titulo...</a>
</div>
<div class="boton" id='2'>
        <a>Titulo...</a>
</div>
<div class="boton" id='3'>
        <a>Titulo...</a>
</div>

<div class="descripcion" id='descripcion1'></div>
<div class="descripcion" id='descripcion2'></div>
<div class="descripcion" id='descripcion3'></div>
Ahora el evento en los botones (para evitar el solapamiento de efectos lo mejor es usar el callback del método slideToggle del div que se quiere ocultar):
Código:
$('.boton').on('click',function(){
  $('.descripcion:visible').slideToggle('slow',function(){
     $('.descripcion#descripcion'+$(this).attr('id')).slideToggle('slow');
  })
})
Saludos!
  #4 (permalink)  
Antiguo 24/06/2014, 18:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Abrir un div al hacer click

Estimado Ktulu, he implementado el cambio que propones pero no funciona como nuestro amigo jbryan1093 desea. Sería bueno que pongas un ejemplo en vivo para verlo funcionar.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 24/06/2014, 20:06
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un div al hacer click

Perdón, no tuve en cuenta que los divs podrían estar ocultos desde un comienzo.
Para ese caso el js sería el siguiente:

Código:
$('.boton').on('click',function(){
  $('.descripcion:visible').slideToggle('fast');
  $('.descripcion#descripcion'+$(this).attr('id')).slideToggle('fast');
})
No se como insertar un iframe como lo hiciste vos con el ejemplo, pero éste es el link al mismo funcionando:
http://jsfiddle.net/W2JnV/

Saludos!
  #6 (permalink)  
Antiguo 29/06/2014, 09:01
 
Fecha de Ingreso: junio-2014
Mensajes: 26
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Abrir un div al hacer click

Hola, muy buen dato. Pero lo que quiero es que si hago click el boton 1 se abra descripción 1 y si vuelvo apretar el boton1 se cierre descripcion1. Como hago eso?, si dejar de lado que si apreto otro boton se cierre el otro para abrir al cual haces click. Eh intentado hacerlo, pero estoy aprendiendo recién y no me sale.
  #7 (permalink)  
Antiguo 29/06/2014, 10:13
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 1 mes
Puntos: 36
Respuesta: Abrir un div al hacer click

Cita:
Iniciado por jbryan1093 Ver Mensaje
Hola, muy buen dato. Pero lo que quiero es que si hago click el boton 1 se abra descripción 1 y si vuelvo apretar el boton1 se cierre descripcion1. Como hago eso?, si dejar de lado que si apreto otro boton se cierre el otro para abrir al cual haces click. Eh intentado hacerlo, pero estoy aprendiendo recién y no me sale.
un ejmplo

Código HTML:
Ver original
  1. <!doctype html>
  2. <html lang="en">
  3.   <meta charset="utf-8">
  4.   <title>toggle demo</title>
  5.   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  6. </head>
  7.  
  8. <button>Toggle</button>
  9. <p>Hello</p>
  10. <p style="display: none">Good Bye</p>
  11.  
  12. $( "button" ).click(function() {
  13.   $( "p" ).toggle();
  14. });
  15.  
  16. </body>
  17. </html>

ya acomodalo a tu conveniencia.

nota: ejemplo tomado de http://api.jquery.com/toggle/

se si te das cuenta esa usando el toggle(); lee un poco la documentacion de jquery para entender lo que hace exactamente .

ok nos vemos y espero haberte ayudado .. si no escribe un privado.. nos vemos
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #8 (permalink)  
Antiguo 29/06/2014, 12:46
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Abrir un div al hacer click

Al ejemplo que te di, solo cámbiale el método slideDown que aplico a los <div> que corresponden con la opción seleccionada por el método slideToggle, de ese modo, si el <div> está oculta, se muestra, caso contrario, se oculta.



Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 29/06/2014, 18:32
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un div al hacer click

Cita:
Iniciado por jbryan1093 Ver Mensaje
Hola, muy buen dato. Pero lo que quiero es que si hago click el boton 1 se abra descripción 1 y si vuelvo apretar el boton1 se cierre descripcion1. Como hago eso?, si dejar de lado que si apreto otro boton se cierre el otro para abrir al cual haces click. Eh intentado hacerlo, pero estoy aprendiendo recién y no me sale.
En ese caso cambiaríamos un poco el evento para controlar que el div a mostrar no sea el que ya se encuentra visible:

Código Javascript:
Ver original
  1. $('.boton').on('click',function(){
  2.   var id = $(this).attr('id'),
  3.       visible = $('.descripcion:visible');
  4.   visible.slideToggle('fast');
  5.   if ('descripcion'+id!=visible.attr('id')) $('.descripcion#descripcion'+id).slideToggle('fast');
  6. })

El ejemplo:



Saludos!
  #10 (permalink)  
Antiguo 13/07/2014, 12:25
 
Fecha de Ingreso: junio-2014
Mensajes: 26
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Abrir un div al hacer click

Gracias a todos.
KTULU, me sirvió mucho tus códigos, es justo como quería.

En jquery la propiedad attr se puede poner otra cosa. Es decir el ID de todos los botones son con los número "1, 2, 3", pero puedo poner letras?. cuando lo cambio deja de funcionar todo.
Traté de averiguar más sobre tus codigos pero no logro entenderlo bien.

Etiquetas: funcion, html, 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 09:48.