Foros del Web » Programando para Internet » Javascript » Frameworks JS »

expandir varios div dinámicos

Estas en el tema de expandir varios div dinámicos en el foro de Frameworks JS en Foros del Web. Hola ,tengo un script que me muestra los usuarios de una base de datos la idea es que al pulsar en el usuario expanda el ...
  #1 (permalink)  
Antiguo 18/09/2010, 13:50
 
Fecha de Ingreso: diciembre-2007
Mensajes: 200
Antigüedad: 17 años
Puntos: 10
expandir varios div dinámicos

Hola ,tengo un script que me muestra los usuarios de una base de datos la idea es que al pulsar en el usuario expanda el telefono y lo contraiga al pulsar sobre el boton al pulsar otro usuario.
El problema que tengo es que si tengo uno va bien pero cuando hay mas de uno al ser dinámico no se decirle que expanda o contraiga ese....

Dentro de un while saco los usuarios con sus teléfonos:
Código PHP:
<div><a id="mostrar-'.$idusuario.'">'.$nombre.'</a></div>
                                  

<
div id="caja-'.$idusuario.'">
'.$telefonouser.'

</div
y el ajax que hace que solo me funcione uno



Código PHP:
<script type="text/javascript">
$(function()
{

$(
"#mostrar").click(function(event) {
event.preventDefault();
$(
"#caja").slideToggle();
});

$(
"#caja a").click(function(event) {
event.preventDefault();
$(
"#caja").slideUp();
});
});
</script> 
Agradecería como hacer para que fuera dinámico creo que es con algo de this pero no se como,porque también quiero tener sólo uno desplegado , no pueden existir dos desplegados a la vez.

Gracias

Última edición por pabrigarcia; 18/09/2010 a las 13:58
  #2 (permalink)  
Antiguo 20/09/2010, 17:17
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Respuesta: expandir varios div dinámicos

Código Javascript:
Ver original
  1. var abierto; // la declaramos como global
  2.  
  3. $(function()
  4. {
  5.  
  6. $("#mostrar").click(function(event) {
  7.   event.preventDefault();
  8.  
  9.   // seguramente haya maneras de hacerlo mejor, pero eso te lo dejo a ti
  10.   // tenemos un problema y es que slideTooggle() usa 1/2 segundillos para la
  11.   // animación y la ejecución sigue su paso. Si ponemos este código después de slideToogle()
  12.   // el comportamiento seria imprevisible dependiendo solo de la velocidad del cliente.
  13.   if($('#caja').css('display') == 'none') // ahora invisible, se hará visible
  14.     abierto = $('#caja');
  15.   else // ahora abierto, se hará invisible
  16.    abierto = null;
  17.  
  18.   $("#caja").slideToggle();
  19. });
  20.  
  21. $("#caja a").click(function(event) {
  22.   event.preventDefault();
  23.   $("#caja").slideUp();
  24.   abierto = null;
  25. });
  26.  
  27. });

Si no entiendes algo no dude en preguntarme
__________________
I (L) Google
  #3 (permalink)  
Antiguo 30/09/2010, 04:58
 
Fecha de Ingreso: diciembre-2007
Mensajes: 200
Antigüedad: 17 años
Puntos: 10
Respuesta: expandir varios div dinámicos

No había visto la respuesta, muchas gracias voy a probar a ver si funciona....
  #4 (permalink)  
Antiguo 30/09/2010, 06:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 200
Antigüedad: 17 años
Puntos: 10
Respuesta: expandir varios div dinámicos

No funciona tampoco me pasa lo mismo que en mi ejemplo , al tener todos la misma id solo funciona con el primero....
  #5 (permalink)  
Antiguo 01/10/2010, 10:50
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Respuesta: expandir varios div dinámicos

Si tienes varias cajas y quieres seleccionarlas todas a la vez me parece que es una buena idea seleccionarlas por clases. La clase "mostrar" y "caja" a lo mejor pueden estar asociadas a estilos CSS o no, pero sirven para que JavaScript reconozca todos los elementos.

Código PHP:
Ver original
  1. // esta variable guardará la caja abierta para poder cerrarla si abrimos otra
  2. var abierto;
  3.  
  4. $(function()
  5. {
  6.  
  7. // selecciona todos los elementos con la clase "mostrar"
  8. $(".mostrar").click(function(event) {
  9.   event.preventDefault();
  10.  
  11.   var id = $(this).attr('id');
  12.   id = id.split('-')[1]; // cogemos el identificador desde el atributo id
  13.  
  14.   // seguramente haya maneras de hacerlo mejor, pero eso te lo dejo a ti
  15.   // tenemos un problema y es que slideTooggle() usa 1/2 segundillos para la
  16.   // animación y la ejecución sigue su paso. Si ponemos este código después de slideToogle()
  17.   // el comportamiento seria imprevisible dependiendo solo de la velocidad del cliente.
  18.   if($('#caja-' + id).css('display') == 'none') // ahora invisible, se hará visible
  19.     abierto = $('#caja-' + id);
  20.   else // ahora abierto, se hará invisible
  21.    abierto = null;
  22.  
  23.   $("#caja-" + id).slideToggle();
  24. });
  25.  
  26. $(".caja a").click(function(event) {
  27.   event.preventDefault();
  28.   $(this).parent().slideUp();
  29.   abierto = null;
  30. });
  31.  
  32. });
  33.  
  34.  
  35.  
  36. <div><a id="mostrar-'.$idusuario.'" class="mostrar">'.$nombre.'</a></div>
  37. <div id="caja-'.$idusuario.'" class="caja">
  38. '.$telefonouser.'
  39.  
  40. </div>

De nuevo, aquí me tienes si el código no te funciona =D
__________________
I (L) Google
  #6 (permalink)  
Antiguo 04/10/2010, 13:30
 
Fecha de Ingreso: febrero-2010
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: expandir varios div dinámicos

prueba metiendo la funcion de javascript con el identificador del usuario dentro de tu iteracion que te muestra los usurios

dentro de tu ciclo

$("#mostrar"+id_usuario).click(function(event) {
event.preventDefault();
$("#caja"+id_usuario).slideToggle();
});
$("#caja"++id_usuario).click(function(event) {
event.preventDefault();
$("#caja"+id_usuario).slideUp();
});
  #7 (permalink)  
Antiguo 05/10/2010, 08:14
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Desacuerdo Respuesta: expandir varios div dinámicos

Cita:
Iniciado por fidel_mar Ver Mensaje
prueba metiendo la funcion de javascript con el identificador del usuario dentro de tu iteracion que te muestra los usurios

dentro de tu ciclo

$("#mostrar"+id_usuario).click(function(event) {
event.preventDefault();
$("#caja"+id_usuario).slideToggle();
});
$("#caja"++id_usuario).click(function(event) {
event.preventDefault();
$("#caja"+id_usuario).slideUp();
});
Eso ya lo había pensado, pero imagina que tiene 20 filas en la tabla. ¿No sería un poco ineficiente tener 20 funciones diferentes que hacen EXACTAMENTE lo mismo? Si lo metes en cada iteración eso es lo que va a ocurrir, puedes verlo en el código final.

Es mejor seleccionarlas por la clase o por parentesco(es decir, los hijos div de tal td, etc.) pero esto último me parecía menos adaptable al diseño que tenga en su página que no corresponde con el código simplificado que ha puesto aquí, aunque ambas soluciones son válidas =D.
__________________
I (L) Google

Etiquetas: ajax
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 14:36.